Bonjour,

Je rencontre des problèmes avec l'utilisation de bitfields. Sujet que je maîtrise mal.

J'avais la structure suivante :

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
};
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
// 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