我不知道爲什麼,但位字段分配不能按預期方式工作。可能只是一個愚蠢的事情,但我一直無法找到問題。位字段結構賦值意外行爲
任何幫助都是值得歡迎的。
typedef struct a {
unsigned char a1 :1;
unsigned char a2 :3;
unsigned char a3 :2;
unsigned char a4 :2;
} __attribute__((packed)) mystruct;
int main() {
mystruct d;
d.a1 = 0;
d.a2 = 2;
d.a3 = 1;
d.a4 = 2;
unsigned char *val = (unsigned char*) &d;
printf("%02X \n", *val);
printf("%02X \n", sizeof(hola));
exit(0);
}
返回的輸出:
94
01
預期輸出:
26
01
位字段的預期結果通常不是您所期望的。而不是檢查你的所有代碼,我會問,你是否考慮過你的平臺的所有字節碼? – KevinDTimm 2012-04-12 16:49:58
0x94是正確的。你爲什麼期望0x26? – James 2012-04-12 16:50:37
@詹姆斯,如果順序是先MSB後跟LSB它將是0x26 – keety 2012-04-12 16:52:28