hexdump vs contenuto effettivo del file


16

Quando lo faccio hexdump filename.txtottengo quanto segue come output:

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

Quando lo faccio <?= bin2hex(file_get_contents('filename.txt')); ?>ottengo questo:

5aacfb5a8dc0155dd0269124c9e81789

Quindi perché hexdump suggerisce che i contenuti dovrebbero essere ac5a5afbc08d5d1526d02491e8c98917quando PHP sta suggerendo che dovrebbero essere 5aacfb5a8dc0155dd0269124c9e81789? Non sto solo interpretando correttamente l'output di hexdump?


Risposte:


24

La differenza è nell'ordine big-endian vs. little-endian .

Iniziare con i primi quattro byte di uscita hexdump: ac5a 5afb. Ora cambia l'ordine dei byte per ottenere:

5aac fb5a

Confronta questo con l'output di PHP:

5aac fb5a

Si abbinano.

Per impostazione predefinita, BSD hexdumpvisualizza l'output in base all'endianness della macchina. Se non lo desideri, puoi specificare l' -Copzione per ottenere l'output byte per byte anziché parola per parola:

$ 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

4
Per aggiungere un po ': hexdump mostra i dati interpretati come parole a sedici bit. bin2hex mostra un byte alla volta, come sarebbe appropriato per caratteri ASCII o simili. Su x86 e x64 (e altre CPU little-endian), il primo byte di un intero multi-byte contiene i bit meno significativi. Quindi se la prima cosa nel tuo file fosse un numero intero a 16 bit contenente il valore 1, mostrandolo come byte mostrerebbe 01 00, ma mostrandolo come una parola di 16 bit mostrerebbe 0001 (ordine di lettura naturale, LSB a destra, come facciamo nell'uso quotidiano dei numeri decimali). en.wikipedia.org/wiki/Endianness
Jamie Hanrahan,

Per aggiungere il commento di @ JamieHanrahan, leggi: "e tutte le altre CPU little-endian", poiché questo è proprio il punto dell'endianness.
glglgl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.