我的 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 char BPB_BytesPerSec[2];
...
125 read (fd, BPB_BytesPerSec, 2);
126 printf("BPB_BytesPerSec = 0x%04x\n", *BPB_BytesPerSec);
产生 BPB_BytesPerSec = 0x0000
我想使用 char 数组来分配空间,因为我想确定我在任何机器上写入的空间;还是我不应该?
再次感谢!