次のタイプの構造体があります
typedef struct
{
unsigned int a : 8;
unsigned int b : 6;
unsigned int c : 2;
}x, *ptr;
私がやりたいことは、フィールド c の値を変更することです。
私は次のようなことをします
x structure = { 0 };
x->c = 1;
メモリ マップを見ると、00 01が見つかるはずですが、代わりに00 40が見つかります。2番目のバイトを配置するときに、cフィールドを最下位ビットに、bフィールドを最上位ビットに配置するように見えます。これは、GCC コンパイラと Windows コンパイラの両方で見られます。
今のところ、私がしていることは次のとおりです。これは正常に機能しています。
unsigned char ptr2 = (unsigned char*) ptr
*(ptr2 + 1) &= 0xFC
*(ptr2 + 1) |= 0x01
メモリマップの見方が間違っていますか? ご協力ありがとうございました。