Probleme affectation structure

Résolu
cimcim Messages postés 31 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 29 juillet 2010 - 11 déc. 2006 à 14:15
cimcim Messages postés 31 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 29 juillet 2010 - 11 déc. 2006 à 17:29
Bonjour à tous...

Je suis en train d'écrire un décodeur de table sdt (api dvb), mais j'ai un souci lors de l'affectation de ma structure...

En gros, ma structure ressemble à ça :

typedef struct {


    u_char    table_id            : 8;


    u_char    section_syntax_indicator    : 1;


    u_char                    : 3;


    u_char    section_length_hi        : 4;


    u_char    section_length_lo        : 8;


    u_char    transport_stream_id_hi        : 8;


    u_char    transport_stream_id_lo        : 8;


    u_char                    : 2;


    u_char    version_number            : 5;


    u_char    current_next_indicator        : 1;


    u_char    section_number            : 8;


    u_char    last_section_number        : 8;


    u_char    original_network_id_hi        : 8;


    u_char    original_network_id_lo        : 8;


    u_char                    : 8;


} sdt_t;

Et, lorsque je la créé, je l'affecte au passage avec ce que j'ai dans
un buffer (char * buf)... (lecture directe dans le demuxer, ce que j'ai
dans mon buffer correspond à ce que j'attend).

création/affectation :
sdt_t enteteSDT = {buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8], buf[9], buf[10]};
Seulement voila... Tout se passe bien (compil, linkage et tout), mais mon buf[1] ne passe pas...

En gros, buf[0] est bien mis dans table_id, buf[1] disparait, et mon
1er octet de buf[2] se retrouve dans section_syntax_indicator...

Je suis obligé d'affecter ma structure en envoyant 2 fois buf[1], mais je ne vois pas pourquoi...

Pour info, buf[1] contient "f2" (en hexa), et il ne me semble pas que ça soit une valeur spéciale (genre \r, \n ou autre).

Ce qui est en bleu est du copié/collé de ma source.. Si il faut d'autres morceaux, merci de me le dire.

Merci

1 réponse

cimcim Messages postés 31 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 29 juillet 2010
11 déc. 2006 à 17:29
Bon, c'est bon...

En fait il m'affectais octet par octet, au lieu de bit par bit...

Mais j'ai trouvé une parade !!!!
    u_char temp[11] = {buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8], buf[9], buf[10]};

    sdt_t &enteteSDT = *(sdt_t*)temp;


Et ca marche !!!
3
Rejoignez-nous