2010-05-17 14 views
26

Ich spiele mit dem Unix-Hexdump-Dienstprogramm. Meine Eingabedatei ist UTF-8-codiert und enthält ein einzelnes Zeichen ñ, das in hexadezimalem UTF-8 C3 B1 ist.Hexdump Verwirrung

hexdump test.txt 
0000000 b1c3 
0000002 

Huh? Dies zeigt B1 C3 - das Gegenteil von dem, was ich erwartet habe! Kann jemand das erklären?

Für die erwartete Ausgabe bekomme ich tun:

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

Ich dachte, ich verstehe Codiersysteme ..

+3

http://en.wikipedia.org/wiki/Endianness – Konerak

Antwort

36

Dies liegt daran, hexdump standardmäßig mit 16-Bit-Wörter und Sie auf ein wenig laufen -endianische Architektur. Die Bytefolge b1 c3 wird somit als Hexwort c3b1 interpretiert. Die Option -C zwingt Hexdump, mit Bytes anstelle von Wörtern zu arbeiten.

+0

Ich dachte, es muss etwas mit Endianness zu tun haben. – zedoo

+3

aber warum Hexdump standardmäßig auf dieses verwirrende Ausgabeformat? Gibt es einen historischen Grund? – accuya

+3

Was verwirrend ist, ist die Neigung von Menschen, Zahlen in Big-Endian-Ordnung zu kodieren. Little-Endian ist logischer, weshalb es auf vielen CPU-Architekturen, einschließlich x86, trotz der Ungeschicklichkeit verwendet wird. –

1

fand ich zwei Möglichkeiten, das zu vermeiden:

hexdump -C file 

oder

od -tx1 < file 

denke ich, dass hexdump entschieden dumm ist, dass die Dateien sind in der Regel 16-Bit-Wort Little-Endian. Sehr verwirrend IMO.