首页 > 解决方案 > Hexdump:在字节和两字节十进制之间转换

问题描述

当我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 组三位数字,为什么不使用与十进制显示相同的东西呢?

标签: bytehexdumpradix

解决方案


正如@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----> 两字节单元(字节顺序取决于您的架构)。

fa * 256 + cf = facf---->适当地----> 0xfacf(重新排序)

而 decoxfacf64207.

额外问题:使用三位数字显示八进制数是一种惯例(与十六进制和十进制不同),因此它对每个字节使用三元组。


推荐阅读