2010-05-17 8 views
26

Gram z narzędziem hexdump unix. Mój plik wejściowy jest kodowany w UTF-8, zawierający pojedynczy znak ñ, który jest C3 B1 w szesnastkowym UTF-8.zamieszanie hexdump

hexdump test.txt 
0000000 b1c3 
0000002 

Huh? To pokazuje B1 C3 - odwrotność tego, czego się spodziewałem! Czy ktoś może wyjaśnić?

Dla uzyskania oczekiwanego wyjście zrobić:

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

Myślałam Rozumiem systemy kodujące ..

+3

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

Odpowiedz

36

To dlatego domyślne HexDump do korzystania z 16-bitowych słów i używasz na trochę architektura portugalska. Cykl bajtowy b1 c3 jest zatem interpretowany jako słowo szesnastkowe c3b1. Opcja -C wymusza działanie hexdump z bajtami zamiast słów.

+0

Myślałem, że to musi mieć coś wspólnego z endianizmem. – zedoo

+3

, ale dlaczego hexdump domyślnie do tego mylącego formatu wyjściowego? czy istnieje jakiś historyczny powód? – accuya

+3

To, co jest mylące, to skłonność ludzi do kodowania liczb w porządku wielkomiejskim. Little-endian jest bardziej logiczny, dlatego jest wykorzystywany na wielu architekturach procesorów, w tym x86, pomimo niezręczności. –

1

znalazłem dwa sposoby unikania że:

hexdump -C file 

lub

od -tx1 < file 

Myślę, że to głupie, że hexdump zdecydował, że pliki są zwykle 16bit słowo little endian. Bardzo mylące IMO.