读取c中的二进制值

时间:2017-12-08 22:39:56

标签: c binary

我可以从二进制文件中读取无符号整数,但其中一个值打印为负数。

预期值:

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);
}

2 个答案:

答案 0 :(得分:5)

printf("%d\n", r);打印出签名的十进制整数。

您想:printf("%u\n", r);

此外,r被声明为int而不是unsigned int

答案 1 :(得分:1)

r的类型为int。 32位int的范围是-2147483648 = -(2^32)/22147483647 = (2^32)/2 -1十进制。

2356985123超出了签名int的范围。按r r打印printf("%d\n", r);时,将显示为-1937982173-1937982173 = 2356985123 - 2^32