Когато пишете unsigned
, това е съкращение от unsigned int
, което е 32 бита широко в Windows. Това означава, че има подравняване на 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