O hexdump respeita a endianness do seu sistema?

23

Na minha máquina, recebo a seguinte saída quando executo estes comandos:

$ echo foos > myfile
$ hexdump myfile
6f66 736f 000a

A saída do hexdump é little-endian. Isso significa que minha máquina é little-endian ou o hexdump sempre usa o formato little-endian?

Cory Klein
fonte

Respostas:

33

O hexdumputilitário BSD tradicional usa o endianness da plataforma; portanto, a saída que você vê significa que sua máquina é pouco endian.

Use hexdump -C(ou od -t x1) para obter resultados consistentes de byte por byte, independentemente da disponibilidade da plataforma.

Gilles 'SO- parar de ser mau'
fonte
5

Na página de manual:

 -x      Two-byte hexadecimal display.  Display the input offset in hexa‐
         decimal, followed by eight, space separated, four column, zero-
         filled, two-byte quantities of input data, in hexadecimal, per
         line.

...

 If no format strings are specified, the default display is equivalent to
 specifying the -x option.

Sua saída é little-endian (primeiro byte menos significativo), que também é a endianness das arquiteturas x86 e x86_64, que você provavelmente está usando.

Dennis Kaarsemaker
fonte
3
Sou eu, ou a página de manual não menciona em nenhum lugar que está tratando as "quantidades de dois bytes" como números inteiros? Eu pensei que eu estava tomando pílulas loucos ...
slashingweapon
@slashingweapon "quantidade de dois bytes de dados de entrada" é uint16_t inteiro.
Ruslan
"Dois bytes" não é o mesmo que uint16_t em um sistema little-endian.
Slashingweapon