Когда вы пишете unsigned
, это сокращение от unsigned int
, которое в Windows имеет ширину 32 бита. Это означает, что он имеет выравнивание 4
. И поскольку ваша структура выровнена, между XDD
и XDD_UI
есть два байта заполнения и два байта заполнения в конце структуры.
Ваша структура выложена следующим образом:
0-1 XDD
2-3 <padding>
4-4 XDD_UI
5-5 XDD_CR
6-7 <padding>
Если вы хотите, чтобы структура была упакована, вам нужно ее упаковать. Используйте #pragma pack
для достижения этого. Однако, даже если вы это сделаете, компилятор создаст структуру размером 6. Это потому, что битовые поля упакованы в unsigned int
, и поэтому ваши два битовых поля всегда будут занимать 4 байта.
Если бы вы убедились, что ваши битовые поля были объявлены как имеющие тип, размер которого не превышает 2 байта, тогда ваша структура будет иметь размер 4 байта. И это было бы верно для выровненной структуры. Например, эта структура имеет размер 4.
struct s {
unsigned short XDD;
unsigned short XDD_UI:8;
unsigned short XDD_CR:8;
};
Однако мне кажется более разумным объявить вашу структуру без битовых полей:
struct s {
Uint16 XDD;
unsigned char XDD_UI;
unsigned char XDD_CR;
};
Вы можете объявить эту структуру выровненной и иметь желаемый макет.
person
David Heffernan
schedule
25.02.2014
XDD
занимает 32 бита? - person Ivaylo Strandjev   schedule 25.02.2014