当我在没有选项的文件上使用hexdump
时,会得到十六进制字节的行:
cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00
当我在同一文件上使用hexdump -d
时,相同的数据以称为两字节十进制分组的形式显示:
64207 65261 00007 00256 00003 32768 00002 00000
所以我想在这里找出如何在这两种编码之间进行转换。小数点的cf
和fa
分别是207
和250
。这些数字如何合并成64207
?
奖金问题:使用这些分组的好处是什么?八进制显示使用三位数字的16个分组,为什么不对十进制显示使用相同的内容?
答案 0 :(得分:0)
如@georg所评论。
0xfa * 256 + 0xcf == 0xfacf == 64207
转换完全像这样。
因此,如果您看到man hexdump
:
-d, --two-bytes-decimal Two-byte decimal display. Display the input offset in hexadecimal, followed by eight space-separated, five-column, zero-filled, two-byte units of input data, in unsigned decimal, per line.
例如,
00000f0 64207 65261 00007 00256 00003 32768 00002 00000
在这里00000f0
是一个十六进制偏移量。
后跟两个字节的输入数据单元,例如:64207
以十进制表示(前16位-即文件的两个字节)。
转换(针对您的情况):
cf fa
---->两字节单元(byte ordering取决于您的体系结构)。
fa * 256 + cf = facf
---->适当----> 0xfacf
(根据记录)
oxfacf
的十进制为64207
。
奖金问题:惯例是使用三位数字显示八进制数字(与十六进制和十进制不同),因此每个字节都使用三元组。