当我从二进制文件中读取无符号整数时,如果文件中的值相当低,它只会读取正确的值 - 当我尝试读取超过 150,000 的值时,它会给我类似 9000 的值...这很奇怪。然而,较小的数字也可以完美工作,例如 50,000...
unsigned int value;
file = fopen(filePath, "rb");
fseek(file, 0, 0);
fread(&value, sizeof(unsigned int), 1, file);
printf("Value from file: %i\n", value);
二进制文件是在程序运行的同一计算机和操作系统上创建的...我缺少什么?二进制文件已正确创建,其中大多数确实返回正确的值并且工作正常,只有数字较大的文件不会...
最佳答案
您获得了正确的值,但使用了错误的格式字符串来打印它,从而产生了未定义的行为。 %i
用于有符号整数。您需要%u
。
以上绝对是一个错误,但如果这不是问题的根源,也有可能您在 Windows 上使用旧版编译器,并且编写代码无法以二进制模式打开文件。在这种情况下,如果其中一个字节恰好是 0x0a,则该值可能会被损坏,在这种情况下读回的值将是错误的。
关于c - 读取具有大值的 unsigned int 时,Fread 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826685/