Hexdump:字节和双字节十进制之间的转换
Hexdump: Convert between bytes and two-byte decimal
当我在没有选项的文件上使用 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组三位数字,为什么不和十进制显示一样?
正如@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
。
奖金问题:使用三位数字显示八进制数是一种惯例(与十六进制和十进制不同),因此它为每个字节使用一个三元组。
当我在没有选项的文件上使用 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组三位数字,为什么不和十进制显示一样?
正如@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
。
奖金问题:使用三位数字显示八进制数是一种惯例(与十六进制和十进制不同),因此它为每个字节使用一个三元组。