hexdump vs contenu du fichier réel

16

Quand je le fais, hexdump filename.txtj'obtiens ce qui suit en sortie:

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

Quand <?= bin2hex(file_get_contents('filename.txt')); ?>j'obtiens, j'obtiens ceci:

5aacfb5a8dc0155dd0269124c9e81789

Alors pourquoi hexdump suggère-t-il que le contenu devrait être ac5a5afbc08d5d1526d02491e8c98917alors que PHP suggère qu'il devrait être5aacfb5a8dc0155dd0269124c9e81789 ? Suis-je tout simplement pas interpréter correctement la sortie de hexdump?

neubert
la source

Réponses:

24

La différence est big-endian vs little-endian .

Commencez par les quatre premiers octets de sortie hexdump: ac5a 5afb. Maintenant, changez l'ordre des octets pour obtenir:

5aac fb5a

Comparez cela avec la sortie PHP:

5aac fb5a

Ils correspondent.

Par défaut, BSD hexdumpaffiche la sortie en fonction de l'endianité de la machine. Si vous ne le souhaitez pas, vous pouvez spécifier l' -Coption pour obtenir la sortie octet par octet plutôt mot par mot:

$ 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
John1024
la source
4
Pour ajouter un peu: hexdump affiche les données interprétées comme des mots de seize bits. bin2hex affiche un octet à la fois, comme il convient pour les caractères ASCII ou similaires. Sur x86 et x64 (et autres processeurs petit-boutistes), le premier octet d'un entier multi-octets contient les bits les moins significatifs. Donc, si la première chose dans votre fichier était un entier de 16 bits contenant la valeur 1, l'afficher en octets afficherait 01 00, mais l'afficher en tant que mot de 16 bits afficherait 0001 (ordre de lecture naturel, LSB à droite, comme nous le faisons dans l'utilisation quotidienne des nombres décimaux). en.wikipedia.org/wiki/Endianness
Jamie Hanrahan
Pour ajouter le commentaire de @ JamieHanrahan, lisez: "et tous les autres processeurs petit-boutistes", car c'est le point même de l'endianisme.
glglgl