这些十六进制值是什么意思?

时间:2019-03-08 13:25:39

标签: hex hexdump hex-editors

我有一张十六进制值的表格(我认为它们是十六进制字节吗?),我试图找出它们的十进制含义。

enter image description here

在网站上,作者指出,突出显示的值 43 7A 00 00 表示十进制 250 ,但是当我将它们输入到十六进制至十进制转换器中时,得到< strong> 1132068864 。

对于我的一生,我不知道发生了什么事。我知道突出显示的值 1 2 3 4 5 6 7 8 9 A B C D E F 上面的命名是十六进制系统,但是我不明白您如何读取表中的值。

我们将不胜感激!

1 个答案:

答案 0 :(得分:1)

这里发生的是 43 7A 00 00 字节没有被视为整数。它们被视为IEEE格式的32位浮点数。这就是为什么图像Type窗口中的Inspector列显示Float的原因。当以这种方式解释这些字节时,它们的确表示值250.0。

您可以在https://en.wikipedia.org/wiki/Single-precision_floating-point_format

了解有关格式的详细信息

在这种特殊情况下,字节将被解码为:

  • 0的“符号”位,表示该值为正数
  • 一个包含位1000 0110(或十六进制 86 ,十进制134)的“指数”字段,表示该指数的值为7(通过从的原始值中减去127计算得出字段134)
  • 包含位1111 1010 0000 0000 0000 0000(或十六进制 FA0000 ,十进制16384000)的“有效位数”字段

有效数和指数根据以下公式组合:

    value = ( significand * (2 ^ exponent) ) / (2 ^ 23)

其中 a ^ b 表示“ a 提升到幂 b ”。

在这种情况下,给出:

    value = ( 16384000 * 2^7 ) / 2^23
          = ( 16384000 * 128 ) / 8388608
          = 250.0