十六进制转储:在字节和两字节十进制之间转换

时间:2019-04-29 15:36:52

标签: byte hexdump radix

当我在没有选项的文件上使用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

所以我想在这里找出如何在这两种编码之间进行转换。小数点的cffa分别是207250。这些数字如何合并成64207

奖金问题:使用这些分组的好处是什么?八进制显示使用三位数字的16个分组,为什么不对十进制显示使用相同的内容?

1 个答案:

答案 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

奖金问题:惯例是使用三位数字显示八进制数字(与十六进制和十进制不同),因此每个字节都使用三元组。