hexdump vs contenido real del archivo


16

Cuando lo hago hexdump filename.txt, obtengo lo siguiente como salida:

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

Cuando lo hago <?= bin2hex(file_get_contents('filename.txt')); ?>me sale esto:

5aacfb5a8dc0155dd0269124c9e81789

Entonces, ¿por qué hexdump sugiere que los contenidos deberían ser ac5a5afbc08d5d1526d02491e8c98917cuando PHP sugiere que deberían ser 5aacfb5a8dc0155dd0269124c9e81789? ¿No estoy interpretando correctamente la salida de hexdump?


Respuestas:


24

La diferencia es el orden big-endian vs. little-endian .

Comenzar con los primeros cuatro bytes de salida hexdump: ac5a 5afb. Ahora cambie el orden de bytes para obtener:

5aac fb5a

Compare esto con la salida de PHP:

5aac fb5a

Ellos coinciden.

Por defecto, BSD hexdumpmuestra resultados basados ​​en la resistencia de la máquina. Si no quiere eso, puede especificar la -Copción de obtener byte por byte en lugar de palabra por palabra:

$ 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

44
Para agregar un bit: hexdump muestra los datos interpretados como palabras de dieciséis bits. bin2hex muestra un byte a la vez, como sería apropiado para caracteres ASCII o similares. En x86 y x64 (y otras CPU little-endian), el primer byte de un entero de varios bytes contiene los bits menos significativos. Entonces, si lo primero en su archivo fue un número entero de 16 bits que contiene el valor 1, mostrarlo como bytes mostrará 01 00, pero mostrarlo como una palabra de 16 bits mostrará 0001 (orden de lectura natural, LSB a la derecha, como lo hacemos en el uso diario de números decimales). en.wikipedia.org/wiki/Endianness
Jamie Hanrahan

Para agregar el comentario de @ JamieHanrahan, lea: "y todas las otras CPU little-endian", ya que este es el punto mismo de la endianness.
glglgl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.