hexdump与实际文件内容


16

当我这样做时hexdump filename.txt,输出如下:

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

当我这样做时<?= bin2hex(file_get_contents('filename.txt')); ?>

5aacfb5a8dc0155dd0269124c9e81789

那么为什么hexdump建议内容应该是ac5a5afbc08d5d1526d02491e8c98917PHP 建议的内容5aacfb5a8dc0155dd0269124c9e81789呢?我只是在不正确解释hexdump的输出吗?


Answers:


24

区别是大端顺序与小端顺序

从hexdump输出的前四个字节开始: ac5a 5afb。现在切换字节顺序以获取:

5aac fb5a

将此与PHP输出进行比较:

5aac fb5a

他们匹配。

默认情况下,BSD hexdump根据机器的字节顺序显示输出。如果您不想这样做,则可以指定-C选项以逐字节而不是逐字获取输出:

$ 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
补充一点:hexdump将数据解释为16位字。bin2hex一次显示一个字节,适用于ASCII字符或类似字符。在x86和x64(和其他低端CPU)上,多字节整数的第一个字节包含最低有效位。因此,如果文件中的第一件事是包含值1的16位整数,则将其显示为字节将显示01 00,而将其显示为16位字将显示0001(自然读取顺序,右侧的LSB,就像我们每天使用十进制数字一样)。en.wikipedia.org/wiki/Endianness
Jamie Hanrahan

要添加@JamieHanrahan的注释,请阅读:“和所有其他小端CPU”,因为这是字节序的重点。
glglgl 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.