我的二进制文件包含0400 0000 0000 0000 0400 0000 0000 0000
当我使用以下代码读取无符号int中的前4个字节时inputInteger
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按顺序读取字符,并将它们按相同的顺序放在目标中,因此对于同一个文件,当您将结果看作一个整数时,对于小尾数和大尾数,结果将不相同
就像你那样
char * p = (char *) &number;
p[0] = fgetc(file);
p[1] = fgetc(file);
...
p[sizeof(int) - 1] = fgetc(file);
(假设文件中有足够的字符)
结果是读取的数字是4。不是位0000 0100 0000 0000==1024吗?
取决于你是小的还是大的,是1024还是64
问题编辑后更新
我的二进制文件包含
0400 0000 0000 0400 0000 00000000 0000
这一次,您似乎以十六进制(不像以前那样以基数2)给出了值,所以您的意思是您的文件包含
04 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
一个字符是8位的,不是16位的
如果32位上的小结束符给出4+(0<如果32位上的big endian给出(4<