byte - Hexdump:字节和双字节十进制之间的转换

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

最佳答案

正如@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

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

关于byte - Hexdump:字节和双字节十进制之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55906583/

相关文章:

声明字节数组时出现 C++ 语法错误

java - java直接发送音频到扬声器

采用基数的 JavaScript 函数或方法?

c# - 为什么我们需要 base() 关键字

cocoa - 在 OS X 上的 Cocoa 中实现自定义 NSView

C++ 覆盖基本成员值

c++ - 在 C++ 中将 24 位整数(2s 补码)转换为 32 位整数

java - 解码为字符串时 ByteBuffer 丢失数据

bash - 如何在不转换为字符串的情况下使用大的十六进制值?

decimal - Hexdump -C 但十进制而不是十六进制