我想使用cpp的位域功能。
但是我得到所有的奇怪behivours,我想知道如果有一種方法來約束編譯器。
結構/類位字段包裝
我想使用該位字段:
class MyBitField
{
uint32 a : 8;
uint32 b : 32;
uint32 c : 32;
}
現在使用此代碼:
uint8 rawData[9] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xFF};
MyBitField \*pMyBitField = (MyBitField\*)rawData;
我預計(在小尾數32位CPU):
A的pMyBitField的字段爲0x12,
pMyBitField的b字段爲0x9A785634,
a的字段o f pMyBitField爲0xFFFFDEBC。
編譯器選擇做出一些無法解釋的對齊。
我知道,如果你在位字段中使用不同的類型,你可能會對齊,但事實並非如此。
我該怎麼做?
讓我們專注於Visual Studio 2005,但任何其他env支持也會受到祝福。
*我讀了一些包裝文章,但沒有改變對齊問題。
謝謝!
谷歌#pragma pack,這是一個指令,讓編譯器在結構中使用特定的對齊方式.... –
嗨,託尼,請詳細說明$ pragma用法 – talel
來自Google的第一個匹配項,具體涉及到你的編譯器,包括例子: http://msdn.microsoft.com/en-us/library/2e70t5y1(v=vs.80).aspx –