hexdump против фактического содержимого файла

1284
neubert

Когда я hexdump filename.txtполучаю следующее как вывод:

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

Когда я <?= bin2hex(file_get_contents('filename.txt')); ?>получаю это:

5aacfb5a8dc0155dd0269124c9e81789 

Так почему hexdump предполагает, что содержимое должно быть, ac5a5afbc08d5d1526d02491e8c98917когда PHP предполагает, что оно должно быть 5aacfb5a8dc0155dd0269124c9e81789? Я просто не правильно интерпретирую вывод hexdump?

16
http://en.wikipedia.org/wiki/Endianness Ƭᴇcʜιᴇ007 9 лет назад 7

1 ответ на вопрос

23
John1024

The difference is big-endian vs. little-endian order.

Start with the first four bytes of hexdump output: ac5a 5afb. Now switch the byte order to get:

5aac fb5a 

Compare this with the PHP output:

5aac fb5a 

They match.

By default, BSD hexdump displays output based on the machine's endianness. If you don't want that, you can specify the -C option to get output byte-by-byte rather word-by-word:

$ 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 
Чтобы добавить немного: hexdump показывает данные, интерпретируемые как шестнадцати-битные слова. bin2hex показывает один байт за раз, что будет подходящим для символов ASCII или аналогичных. В x86 и x64 (и других процессорах с прямым порядком байтов) первый байт многобайтового целого числа содержит младшие значащие биты. Таким образом, если первым в вашем файле было 16-разрядное целое число, содержащее значение 1, его отображение в виде байтов показывало бы 01 00, а отображение в виде 16-разрядного слова показывало бы 0001 (естественный порядок чтения, LSB справа, как мы делаем в повседневном использовании десятичных чисел). https://en.wikipedia.org/wiki/Endianness Jamie Hanrahan 9 лет назад 4
Чтобы добавить комментарий @ JamieHanrahan, прочитайте: «и все остальные процессоры с прямым порядком байтов», так как это и есть точка байтов. glglgl 9 лет назад 0

Похожие вопросы