1
我有一些問題,包括位字段的結構。考慮下面的代碼:C++結構長long位字段
#pragma pack(push, 1)
struct DATA_WARNINGS {
unsigned char fl_num : 8;
unsigned char dev_reload : 1;
unsigned char : 1;
unsigned long long flags : 54;
};
#pragma pack(pop)
這樣的結構的大小是10個字節的預期。我想要做的是在不改變位域的寬度的情況下以8個字節來適應這個結構。所以我所做的是將第一個字段的類型改爲unsigned long long。像這樣:
#pragma pack(push, 1)
struct DATA_WARNINGS {
unsigned long long fl_num : 8;
unsigned char dev_reload : 1;
unsigned char : 1;
unsigned long long flags : 54;
};
#pragma pack(pop)
我預計所有結構都適合一個無符號long long。但實際上這種結構的大小變成了sizeof返回的17個字節。如果我將所有字段類型更改爲無符號長整型比結構大小變爲8個字節。 問題是如何在不改變字段類型的情況下適合8字節的結構。我在32位機器上使用VS2013。