Czy hexdump szanuje endianizm swojego systemu?

23

Na moim komputerze otrzymuję następujące dane wyjściowe po uruchomieniu tych poleceń:

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

Dane wyjściowe z hexdump jest little-endian. Czy to oznacza, że ​​moja maszyna jest little-endian, czy też hexdump zawsze używa formatu little-endian?

Cory Klein
źródło

Odpowiedzi:

33

Tradycyjne hexdumpnarzędzie BSD korzysta z endianizmu platformy, więc wynik, który widzisz, oznacza, że ​​twoja maszyna jest little-endian.

Użyj hexdump -C(lub od -t x1), aby uzyskać spójny wynik bajt po bajcie, niezależnie od endianizmu platformy.

Gilles „SO- przestań być zły”
źródło
5

Z strony podręcznika:

 -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.

Twój wynik to little-endian (najpierw najmniej znaczący bajt), co jest także endianem architektur x86 i x86_64, których prawdopodobnie używasz.

Dennis Kaarsemaker
źródło
3
Czy to tylko ja, czy też strona man nie wspomina nigdzie, że traktuje „dwubajtowe wielkości” jako liczby całkowite? Myślałem, że biorę szalone pigułki ...
slashingweapon
@ slashingweapon „dwubajtowa ilość danych wejściowych” jest uint16_t liczbą całkowitą.
Ruslan
„Dwa bajty” to nie to samo co uint16_t w systemie little-endian.
slashingweapon