構造体のメンバー変数へのエントリ メモリ アドレスの取得に問題があります。2 つの方法で試しましたが、そのうちの 1 つは正しく機能しませんでした。アドバイスをいただければとても助かります。
まず、BITMAP_HEADER という名前の構造体を定義しました。
struct BITMAP_HEADER
{
WORD bfType ;
DWORD bfSize ;
WORD bfReserved1 ;
WORD bfReserved2 ;
DWORD bfOffBits ;
} ;
次に、いくつかの変数を定義して初期化しました。次の行を読む前に、以下のコードを見てください。なぜ文字ポインタを取得したのかと聞かれると、整数 bfSize の各バイトにアクセスする必要がありました。
struct BITMAP_HEADER bitmap_header ;
char* pSize = (char*)&bitmap_header.bfSize;
3 番目に、2 つの異なる方法で bfSize のメモリ アドレスを取得し、値を出力しました。
1. printf("%X\n", *pSize) ;
2. printf("%X\n", (unsigned char)*(((char*)&bitmap_header)+2)) ;
(1) bitmap_header.bfSize にメモリアドレスを直接取得する。
(2) 構造体 BITMAP_HEADER へのメモリアドレスを取得し、ポインタを次へ 2 バイトシフトします。
最後に、これが結果です。
2D
F6
参考までに、構造体 BITMAP_HEADER の 16 進データを次に示します。
42 4D / F6 C6 2D 00 / 00 00 / 00 00 / 36 00 00 00
最初の方法が機能しなかったのはなぜですか? 2つの方法はまったく同じだと思いました。