hexdump versus o conteúdo real do arquivo

16

Quando eu faço hexdump filename.txt , recebo o seguinte como saída:

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

Quando faço <?= bin2hex(file_get_contents('filename.txt')); ?> , obtenho isto:

5aacfb5a8dc0155dd0269124c9e81789

Então por que o hexdump está sugerindo que o conteúdo deve ser ac5a5afbc08d5d1526d02491e8c98917 quando o PHP está sugerindo que eles devem ser 5aacfb5a8dc0155dd0269124c9e81789 ? Eu não estou apenas interpretando corretamente a saída do hexdump?

    
por neubert 17.10.2014 / 02:13

1 resposta

23

A diferença é ordem big-endian vs. little-endian .

Comece com os primeiros quatro bytes da saída hexadump: ac5a 5afb . Agora mude a ordem de bytes para obter:

5aac fb5a

Compare isso com a saída do PHP:

5aac fb5a

Eles combinam.

Por padrão, o BSD hexdump exibe a saída com base no endianness da máquina. Se você não quiser isso, você pode especificar a opção -C para obter a saída byte por byte, em vez de palavra por palavra:

$ 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
    
por 17.10.2014 / 02:24