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 に焦点を当てましょうが、他の環境サポートも同様に祝福されます。
*パッキングの投稿をいくつか読みましたが、アライメントの問題は変わりませんでした。
ありがとう!