gpt4 book ai didi

c - FAT BPB 和小端反转

转载 作者:行者123 更新时间:2023-12-02 18:21:51 27 4
gpt4 key购买 nike

我的 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

我想使用字符数组来分配空间,因为我想确定我在任何机器上写入的空间;或者我不应该?

再次感谢!

最佳答案

您错误地读取了BPB_BytesPerSec。 Bpb的结构是(来自here):

BYTE  BS_jmpBoot[3];
BYTE BS_OEMName[8];
WORD BPB_BytesPerSec;
...

前两个字段是字节,因此它们的字节顺序无关(我认为)。 BPB_BytesPerSec 是一个 WORD(假设 2 个字节),因此您应该像这样定义/读取它:

WORD BPB_BytesPerSec;            //Assuming WORD is defined on your system
read (fd, &BPB_BytesPerSec, 2);
printf("BPB_BytesPerSec = 0x%04x\n", BPB_BytesPerSec);

由于当您直接读取字节时,您会得到00 02,即小尾数中的0x0200,因此您应该像这样正确读取BPB_BytesPerSec .

关于c - FAT BPB 和小端反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27158708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com