gpt4 book ai didi

c - 为什么 Fread 以相反的顺序读取 unsigned-int?

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:20 24 4
gpt4 key购买 nike

我的二进制文件包含

0400 0000 0000 0000 0400 0000 0000 0000

当我使用以下代码读取 unsigned int inputInteger 中的前 4 个字节时

FILE *inputFile;
inputFile = fopen("./Debug/rnd_2", "rb");
unsigned int inputInteger = 0;
fread(&inputInteger, sizeof(unsigned int), 1, inputFile);
fclose(inputFile);
exit(0);

我得到的是 inputInteger == 4。考虑到位位置是 00000100 00000000,它不应该是 1024 吗?

我的理解是前四个字节是0400 0000

编辑:代码和问题的措辞

最佳答案

fread 按顺序读取字符并将它们以相同的顺序放在目标中,因此对于相同的文件,当您考虑回结果为 int

如果你这样做就完全一样

char * p = (char *) &number;

p[0] = fgetc(file);
p[1] = fgetc(file);
...
p[sizeof(int) - 1] = fgetc(file);

(假设文件中有足够的字符)

Turns out number read is 4. Is not the bits 0000 0100 0000 0000 == 1024?

取决于你是小端还是大端,是 1024 还是 64


问题编辑后更新

My binary file contains

0400 0000 0000 0000 0400 0000 0000 00000000 0000 0000

那个时候你似乎给出了六进制的值(而不是像以前那样以 2 为基数),所以你的意思是你的文件包含

04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00

一个字符是 8 位的,而不是 16 位的

  • 如果 32 位的小尾数法给出 4 + (0<<8) + (0<<16) + (0<<24) = 4

  • 如果 32 位的大字节序给出 (4<<24) + (0<<16) + (0<<8) + 0 = 16384

关于c - 为什么 Fread 以相反的顺序读取 unsigned-int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856419/

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