Hexdump im Vergleich zum tatsächlichen Inhalt der Datei

1347
neubert

Wenn ich das hexdump filename.txtbekomme, bekomme ich folgende Ausgabe:

00000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917 00000010  

Wenn ich das <?= bin2hex(file_get_contents('filename.txt')); ?>bekomme:

5aacfb5a8dc0155dd0269124c9e81789 

Warum schlägt hexdump vor, dass der Inhalt sein sollte, ac5a5afbc08d5d1526d02491e8c98917wenn PHP angibt, dass dies der Fall sein sollte 5aacfb5a8dc0155dd0269124c9e81789? Interpretiere ich die Ausgabe von Hexdump nicht richtig?

16
http://en.wikipedia.org/wiki/Endianness Ƭᴇcʜιᴇ007 vor 9 Jahren 7

1 Antwort auf die Frage

23
John1024

Der Unterschied ist zwischen Big-Endian und Little-Endian-Reihenfolge .

Beginnen Sie mit den ersten vier Bytes von hexdump Ausgabe: ac5a 5afb. Wechseln Sie nun die Byte-Reihenfolge, um Folgendes zu erhalten:

5aac fb5a 

Vergleichen Sie dies mit der PHP-Ausgabe:

5aac fb5a 

Sie passen.

Standardmäßig zeigt BSD hexdumpdie Ausgabe basierend auf der Endianness der Maschine an. Wenn Sie das nicht möchten, können Sie die -COption angeben, die Ausgabe Byte für Byte und nicht Wort für Wort abzurufen:

$ hexdump filename.txt  0000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917 0000010 $ hexdump -C filename.txt  00000000 5a ac fb 5a 8d c0 15 5d d0 26 91 24 c9 e8 17 89 |Z..Z...].&.$....| 00000010 
Um ein Bit hinzuzufügen: hexdump zeigt die Daten als 16-Bit-Wörter an. bin2hex zeigt jeweils ein Byte an, wie es für ASCII-Zeichen oder ähnliches geeignet wäre. Bei x86 und x64 (und anderen Little-Endian-CPUs) enthält das erste Byte einer Multi-Byte-Ganzzahl die niedrigstwertigen Bits. Wenn das erste in Ihrer Datei eine 16-Bit-Ganzzahl mit dem Wert 1 ist, würde die Anzeige als Bytes 01 00 anzeigen, die Anzeige als 16-Bit-Wort würde jedoch 0001 anzeigen (natürliche Lesereihenfolge, rechts LSB). wie im täglichen Gebrauch von Dezimalzahlen). https://en.wikipedia.org/wiki/Endianness Jamie Hanrahan vor 9 Jahren 4
Um @ JamieHanrahans Kommentar hinzuzufügen, lesen Sie: "und alle anderen Little-Endian-CPUs", da dies der Endpunkt der Endianness ist. glglgl vor 9 Jahren 0