hexdump混乱

zed*_*doo 33 hexdump

我正在使用unix hexdump实用程序.我的输入文件是UTF-8编码的,包含一个单字符ñ,它是C3 B1十六进制的UTF-8.

hexdump test.txt
0000000 b1c3
0000002
Run Code Online (Sandbox Code Playgroud)

咦?这表明B1 C3- 与我的预期相反!谁能解释一下?

为了获得预期的输出,我做了:

hexdump -C test.txt
00000000  c3 b1                                             |..|
00000002
Run Code Online (Sandbox Code Playgroud)

我以为我理解编码系统..

Mar*_*tos 42

这是因为hexdump默认使用16位字,并且您运行的是little-endian架构.因此字节序列b1 c3被解释为十六进制字c3b1.该-C选项强制hexdump使用字节而不是单词.

  • 但为什么hexdump默认使用这种令人困惑的输出格式?有历史原因吗? (3认同)
  • 令人困惑的是人类以大端顺序编码数字的倾向.Little-endian更符合逻辑,这就是为什么它被用在许多CPU架构上,包括x86,尽管它很尴尬. (3认同)
  • 实际上,big-endian和little-endian都有自己的优点和缺点.在绝对意义上,两者都不是"更合乎逻辑". (3认同)
  • 纯粹是猜测,但历史原因几乎可以肯定,hexdump 最初是在使用 16 位字的小端机器上实现的,并且这是一个完全合理的默认值。 (2认同)