私の CPU はリトル エンディアンです。ドキュメントによると、FAT 仕様のバイト オーダーに準拠しています。では、BS_jmpBoot の有効なアドレス、最初のセクターのバイト 0 ~ 3 を取得しているのに、BPB_BytesPerSec の有効な番号、最初のセクターのバイト 11 ~ 12 を取得していないのはなぜですか。
116 int fd = open (diskpath, O_RDONLY, S_IROTH);
117
118 read (fd, BS_jmpBoot, 3);
119 printf("BS_jmpBoot = 0x%02x%02x%02x\n", BS_jmpBoot[0], S_jmpBoot[1], S_jmpBoot[2]);
120
121 read (fd, OEMName, 8);
122 OEMName[8] = '\0';
123 printf("OEMName = %s\n", OEMName);
124
125 read (fd, BPB_BytesPerSec, 2);
126 printf("BPB_BytesPerSec = 0x%02x%02x\n",BPB_BytesPerSec[0], BPB_BytesPerSec[1]);
収量
BS_jmpBoot = 0xeb5890 //valid address, while 0x9058eb would not be
OEMName = MSDOS5.0
BPB_BytesPerSec = 0x0002 //Should be 0x0200
BS_jmpBoot と OEMName が有効であるのに BPB_BytesPerSec が有効でない理由を突き止めたいと思います。誰かが私を啓発することができれば、私は非常に感謝しています.
ありがとう
編集: 助けてくれてありがとう、すべてがうまくいかなかったのは私のタイプでした. uesp が示唆したように、バイトを unsigned short に書き込むことで機能するようになりましたが (ちょっと)、これが機能しなかった理由を知りたいです:
unsigned char BPB_BytesPerSec[2];
...
125 read (fd, BPB_BytesPerSec, 2);
126 printf("BPB_BytesPerSec = 0x%04x\n", *BPB_BytesPerSec);
生成された BPB_BytesPerSec = 0x0000
どのマシンでも書き込んでいるスペースを確認したいので、スペースを割り当てるために char 配列を使用したいと思います。または私はすべきではありませんか?
再度、感謝します!