私はいくつかのメモリを割り当て、いくつかの値に初期化して、このメモリの異なるセグメントを異なる構造体にキャストしたいと思います。メモリを共用体にキャストする
union structA{
__int8 mem[3];
struct{
unsigned field1 : 8;
unsigned field2 : 12;
unsigned field3 : 4;
};
};
struct structB{
__int8 mem[10];
};
__int8 globalMem[128];
structA a1 <---- &globalMem[0]
structA a2 <---- &globalMem[10]
structB b1 <---- &globalMem[30]
私はreinterpret_castはを使用してみました、私は任意のコンパイラエラーを得ることはありませんが、私の変数(a1
、a2
とb1
が)本当に正しく初期化/割り当てられていないようです:何かが次のように。
これがなぜ機能しないのか、これを実現する正しい方法は何ですか?
ありがとうございます!あなたがするつもり何を達成するために
ビットフィールドの整列と埋め込みは実装定義です。コンパイラがビットフィールドを使用して構造体にパディングを追加したかどうかを調べる必要があります。可能性が高い –
また、署名された基底型( '__int8')を使用することは最適ではないかもしれません。 –
プログラムを とラップしようとしました 'プラグマパック(プッシュ、1) プログラム プラグマパック(ポップ)' Sam Varshavchikが言及したように、パディングの問題はなくなります。 – GoldenSpecOps