2010-05-17 83 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。