我可以从二进制文件中读取无符号整数,但其中一个值打印为负数。
预期值:
45788331, 281302247, 461354227, 13127, 299215653, 2356985123,
打印出来的值:
45788331, 281302247, 461354227, 13127, 299215653, -1932982173,
第6个值打印为负数,但我正在读取无符号整数列表?
我的代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * fp;
ssize_t read;
int r = 0;
fp = fopen("numbers.bin", "rb");
if (fp == NULL)
exit(-1);
while(fread(&r, sizeof(unsigned int), 1, fp) == 1)
{
printf("%d\n", r);
}
fclose(fp);
if (line) free(line);
exit(0);
}
答案 0 :(得分:5)
printf("%d\n", r);
打印出签名的十进制整数。
您想:printf("%u\n", r);
此外,r
被声明为int
而不是unsigned int
。
答案 1 :(得分:1)
r
的类型为int
。 32位int
的范围是-2147483648
= -(2^32)/2
到2147483647
= (2^32)/2 -1
十进制。
2356985123
超出了签名int
的范围。按r
r打印printf("%d\n", r);
时,将显示为-1937982173
。
-1937982173
= 2356985123 - 2^32