【问题标题】:hexdump confusion十六进制转储混乱
【发布时间】:2010-05-17 07:47:45
【问题描述】:

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

hexdump test.txt
0000000 b1c3
0000002

嗯?这显示了B1 C3 - 与我的预期相反!谁能解释一下?

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

hexdump -C test.txt
00000000  c3 b1                                             |..|
00000002

我以为我了解编码系统。

【问题讨论】:

标签: hexdump


【解决方案1】:

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

【讨论】:

  • 我在想它一定与字节序有关。
  • 但是为什么 hexdump 默认使用这种令人困惑的输出格式?有什么历史原因吗?
  • 令人困惑的是人类倾向于以大端顺序编码数字。 Little-endian 更符合逻辑,这就是为什么它在许多 CPU 架构上使用,包括 x86,尽管有点笨拙。
  • 其实big-endian和little-endian各有优缺点。从绝对意义上说,两者都不是“更合乎逻辑”。
  • 纯属猜想,但历史原因几乎可以肯定是 hexdump 最初是在使用 16 位字的小端机器上实现的,这是一个完全合理的默认设置。
【解决方案2】:

我找到了两种避免这种情况的方法:

hexdump -C file

od -tx1 < file

我认为 hexdump 决定文件通常是 16 位字 little endian 是愚蠢的。非常令人困惑的 IMO。

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2014-04-20
    • 2021-03-22
    • 2018-07-26
    • 2014-10-30
    相关资源
    最近更新 更多