为什么fwrite向后打印十六进制值?

时间:2011-12-31 19:00:00

标签: c fwrite

  

可能重复:
  Why does C print my hex values incorrectly?

我将fwrite信息输出到二进制文件但是当我在xxd中查看它时,hex的输出不是有序的。这是二进制文件的外观吗?

要打印到目的地的代码:

  int delim[] = { 0xabcd1234 };
  fwrite(delim, 4, 1, destination);
  char buffer[] = "I like dog";
  fwrite(buffer, 1, 10, destination);

xxd输出:

0000000: 3412 cdab 4920 6c69 6b65 2064 6f67       4...I like dog

正如您所看到的,十六进制数是3412 cdab而不是abcd1234

3 个答案:

答案 0 :(得分:4)

因为这就是你的处理器显然存储整数的方式。

有关维基百科的更多信息 - Endianness

答案 1 :(得分:3)

正如Tom van der Woredt所指出的,这是一个字节序问题(可能是xxd的问题,使它转储单个字节,而不是双字节)。

如果要确保文件中的十六进制按特定顺序,请使用无符号字符数组,而不是:

unsigned char delim[] = {0xab, 0xcd, 0x12, 0x34};
fwrite(delim, sizeof *delim, sizeof delim,  destination);

答案 2 :(得分:0)

这是处理器存储整数的小端方式。