我想使用 cpp 的位域功能。
但是我得到了各种奇怪的行为,我想知道是否有
办法限制编译器。
我想使用这个位字段:
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 上): pMyBitField 的 a 字段
为 0x12,pMyBitField
的 b 字段为 0x9A785634,pMyBitField
的 a 字段为 0xFFFFDEBC。
编译器选择进行一些无法解释的对齐。
我知道如果您在位字段中使用不同的类型,您可能会得到对齐,但事实并非如此。
我该怎么做?
让我们专注于 Visual Studio 2005,但任何其他 env 支持也将受到祝福。
*我阅读了一些关于包装的帖子,但它并没有改变对齐问题。
谢谢!