c++ - 在使用 fwrite 创建图像后交换字节

标签 c++ c

<分区>

我使用下面的 c 程序创建了填充增量数字的二进制图像。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
        FILE *w_file;
        long cnt = 0, buf_cnt = 0,pn_cnt = 0x0;
        char buffer[4194305];


        w_file = fopen ( "test.img" , "wb" );
        if (w_file==NULL)
        {
                perror("File error");
                return -1;
        }
        for (cnt = 0; cnt < (4096*1024); cnt++)
        {
                buffer[cnt] = cnt;
        }

        fwrite(buffer, 4096, 1024, w_file);

        fclose (w_file);
        return 0;

}  

但是当我用 hexdump 检查图像时,我注意到所有的字节都被交换了。为什么会这样?

hexdump 示例截图:

0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000010 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e
0000020 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e
0000030 3130 3332 3534 3736 3938 3b3a 3d3c 3f3e
0000040 4140 4342 4544 4746 4948 4b4a 4d4c 4f4e
0000050 5150 5352 5554 5756 5958 5b5a 5d5c 5f5e
0000060 6160 6362 6564 6766 6968 6b6a 6d6c 6f6e
0000070 7170 7372 7574 7776 7978 7b7a 7d7c 7f7e
0000080 8180 8382 8584 8786 8988 8b8a 8d8c 8f8e
0000090 9190 9392 9594 9796 9998 9b9a 9d9c 9f9e
00000a0 a1a0 a3a2 a5a4 a7a6 a9a8 abaa adac afae
00000b0 b1b0 b3b2 b5b4 b7b6 b9b8 bbba bdbc bfbe
00000c0 c1c0 c3c2 c5c4 c7c6 c9c8 cbca cdcc cfce 

最佳答案

Hexdump 在显示时交换字节。

hexdump confusion

如果您使用 hexdump -C ...,您很可能会得到预期的结果。

关于c++ - 在使用 fwrite 创建图像后交换字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308532/

相关文章:

c++ - 在 C++ 中的派生类之间切换

c++ - 缺少类模板的参数列表

c++ - 为常量语法或语义错误赋值?

c++ - 指向结构体访问冲突写入位置的指针

c - 如何在输入中捕获 Tab 击键? (诅咒)

清除 double 的尾随 0?

c++ - 对象没有命名类型 - C++

c++ - 为什么在这种情况下使用 RemovAll() 时 CArray 会崩溃?

android - 将 C 库连接到 iOS 应用程序

c++ - C++ 异常和 setjmp/longjmp 的代价