2010-05-17 41 views
26

我在玩unix hexdump工具。我的输入文件是UTF-8编码,包含单个字符ñ,它是十六进制UTF-8中的C3 B1hexdump混淆

hexdump test.txt 
0000000 b1c3 
0000002 

咦?这显示B1 C3 - 与我预期的相反!有人可以解释吗?

为了得到所期望的输出我做的:

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

我想我明白编码系统..

+3

http://en.wikipedia.org/wiki/Endianness – Konerak 2010-05-17 07:56:04

回答

36

这是因为hexdump都默认使用16位字,你是一个小运行 - 印第安建筑。字节序列b1 c3因此被解释为十六进制字c3b1-C选项强制hexdump使用字节而不是单词。

+0

我认为它必须与endianness有关。 – zedoo 2010-05-17 08:18:32

+3

但为什么hexdump默认为这种令人困惑的输出格式?有没有历史原因? – accuya 2012-03-01 12:05:56

+3

令人困惑的是人类以大端顺序对数字进行编码的倾向。 Little-endian更合乎逻辑,这就是为什么它在许多CPU架构上使用,包括x86,尽管有尴尬。 – 2012-03-02 02:32:17

1

我发现了两个方法来避免:

hexdump -C file 

od -tx1 < file 

我认为这是愚蠢,hexdump都决定文件通常16位字小尾数。非常混乱的IMO。