读取带有大值的unsigned int时,Fread返回错误的值

时间:2017-03-16 06:22:56

标签: c fread unsigned-integer

当我从二进制文件中读取unsigned int时,如果文件中的值相当低,它只会读取正确的值 - 当我尝试读取超过150,000的值时,它会给我类似9000的内容......它&# 39;很奇怪。然而,较小的数字可以完美地工作,例如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);

二进制文件是在同一台计算机上创建的。程序运行的操作系统......我错过了什么?二进制文件正确创建,大多数都返回正确的值&工作得很好,只有那些有大数字的人不会......

1 个答案:

答案 0 :(得分:2)

您获得了正确的值,但使用了错误的格式字符串来打印它,产生了未定义的行为。 %i用于签名整数。您需要%u

以上肯定是一个错误,但如果它不是问题的根源,那么你也可能在Windows上使用遗留编译器并且编写代码是无法以二进制模式打开文件。在这种情况下,如果其中一个字节恰好是0x0a,则该值可能会被破坏,在这种情况下,读回的值将是错误的。