Bonjour,
Je rencontre des problèmes avec l'utilisation de bitfields. Sujet que je maîtrise mal.
J'avais la structure suivante :
que j'ai transformée en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // 2*32 bits partiellement remplis struct MaStruct { unsigned long var01 :10; unsigned long var02 : 3; unsigned long var03 : 5; unsigned long var04 : 5; unsigned long var05 : 3; unsigned long var06 : 3; unsigned long var07 : 1; unsigned long var08 : 1; // on saute 1bit // ------------------------- unsigned long var09 :17; unsigned long var10 : 8; // 7 derniers bits non utilisés };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // 64 bits totalement remplis struct MaStruct { uint64_t var01 :10; uint64_t var02 : 3; uint64_t var03 : 5; uint64_t var04 : 5; uint64_t var05 : 3; uint64_t var06 : 3; uint64_t var07 : 1; uint64_t var08 : 1; uint64_t var09 :17; uint64_t var10 : 8; uint64_t var11 : 8; }};
- j'ai rajouté un champ (var11)
- j'ai changé le type de 32 en 64 bits
- le cumul des bits fait 64 au lieu de 56
La structure est initialement remplie par un reinterpret_cast faisant suite à une lecture de fichier.
Il semble qu'à la suite de ma modif, les données que je récupère à partir du 32ème bit de la structure ne soient pas bonnes : à partir du champ var09, il y a un décalage d'1 bit (var09 et var10 ont une valeur 2 fois trop grande).
Auriez-vous une idée ?
PS : j'utilise VS2010 en 64 bits
Partager