【问题标题】:What does these hex values mean?这些十六进制值是什么意思?
【发布时间】:2019-07-30 13:01:15
【问题描述】:

我有一个十六进制值的值表(我认为它们是十六进制字节?),我试图弄清楚它们在十进制中的含义。

在网站上,作者指出突出显示的值 43 7A 00 00 表示十进制的 250,但是当我将这些值输入十六进制到十进制转换器时,我得到 1132068864.

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

我们将不胜感激!

【问题讨论】:

    标签: hex hexdump hex-editors


    【解决方案1】:

    这里发生的是字节 43 7A 00 00 没有被视为整数。它们被视为 IEEE 格式的 32 位浮点数。这就是图像中Inspector 窗口中的Type 列显示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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 2018-09-08
      • 2020-06-18
      • 2013-06-17
      • 2020-11-25
      • 2013-08-26
      相关资源
      最近更新 更多