【问题标题】:Hexdump: Convert between bytes and two-byte decimalHexdump:在字节和两字节十进制之间转换
【发布时间】:2019-04-29 15:36:51
【问题描述】:

当我在没有选项的文件上使用 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组三位数字,为什么不使用与十进制显示相同的东西?

【问题讨论】:

  • 0xfa * 256 + 0xcf == 0xfacf == 64207

标签: byte hexdump radix


【解决方案1】:

正如@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 的 dec 是 64207

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

【讨论】:

  • 谢谢@Rutaraj!不过,我的额外问题可能还不清楚;我想问的是使用两字节单位进行十进制显示的好处。我不明白你为什么不像其他基数那样使用单字节单位。
猜你喜欢
  • 2014-03-11
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 2016-12-18
  • 2011-10-19
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多