Probleme affectation structure [Résolu]

Signaler
Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010
-
Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010
-
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

Messages postés
31
Date d'inscription
mardi 11 janvier 2005
Statut
Membre
Dernière intervention
29 juillet 2010

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 !!!