使用来自二进制(十六进制)文件的fread交换字节

时间:2018-03-21 01:10:09

标签: c binary hex endianness fread

我有二进制文件(十六进制表示),带有以下输入,

0000 1900

我正在使用以下代码将数据读入整数。

 fp = fopen(argv[1], "rb");
    if (fp == NULL){
        printf("Error - Failed opening the file\n");
        return EXIT_FAILURE;
    } else{
        printf("Disk image file [%s] opened...\n\n", argv[1]);
    }

int x = 0;
fread(&x, sizeof(int), 1, fp);
printf("Block count Hex: %x\n", x);
printf("Block count dec: %d\n", x);

产生以下输出后,字节位置似乎由fread函数交换。

Block count Hex: 190000
Block count dec: 1638400

如果我已经阅读了字节序问题,但这似乎与我得到的输出不匹配。任何帮助解决这个问题将不胜感激。

其他问题:

- 读取存储在int变量中的十六进制值的最佳方法是什么?我一直在使用%x和pŕintf,我想知道是否有更好的方法来调试我的代码。

1 个答案:

答案 0 :(得分:0)

要在计算机之间或应用程序之间传输数据时处理字节序问题,htonlntohl函数很有用。