2010-05-17 14 views
26

Juego con la utilidad hexdump de unix. Mi archivo de entrada está codificado en UTF-8, contiene un solo carácter ñ, que es C3 B1 en hexadecimal UTF-8.hexdump confusion

hexdump test.txt 
0000000 b1c3 
0000002 

¿Huh? Esto muestra B1 C3 - ¡el inverso de lo que esperaba! ¿Alguien puede explicar?

Para conseguir el resultado esperado que hago:

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

Estaba pensando que entiendo que codifican los sistemas ..

+3

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

Respuesta

36

Esto se debe a que los valores predeterminados hexdump para el uso de palabras de 16 bits y que se ejecutan en un poco arquitectura india La secuencia de bytes b1 c3 se interpreta así como la palabra hexadecimal c3b1. La opción -C fuerza a hexdump a trabajar con bytes en lugar de palabras.

+0

Estaba pensando que debe tener algo que ver con el endianness. – zedoo

+3

, pero ¿por qué hexdump por defecto a este formato de salida confuso? ¿Hay alguna razón histórica? – accuya

+3

Lo que es confuso es la propensión de los humanos a codificar números en orden big-endian. Little-endian es más lógico, por lo que se usa en muchas arquitecturas de CPU, incluida x86, a pesar de la incomodidad. –

1

He encontrado dos formas de evitar que:

hexdump -C file 

o

od -tx1 < file 

Creo que es estúpido que hexdump decidió que los archivos son por lo general la palabra de 16 bits little endian. Muy confuso IMO.