【问题标题】:Convert HEX to IEEE 754 float将 HEX 转换为 IEEE 754 浮点数
【发布时间】:2019-08-29 17:07:27
【问题描述】:

我正在编写一个 bash 脚本来解释安然历史格式的 Modbus RTU 消息。消息是二进制的。我需要将一些字节转换为 32 位浮点数。我想使用 POSIX 可用的程序,或者至少是非常常用的程序。 Bash、AWK、sed、od 等。

鉴于 00b74e47,我尝试使用 od,但我期待 52919.000000。 od 没有给我我期望的结果。

echo -ne "\x00\xb7\x4e\x47" | od -tfD
0000000          5.91070985e-315
0000004

【问题讨论】:

标签: bash ieee-754 modbus


【解决方案1】:

如果python3 是您的选择,请尝试以下操作:

echo "436a508c" | python3 -c 'import struct; print(struct.unpack("!f", bytes.fromhex(input()))[0])'

产量:

234.31463623046875

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用 GNU 调试器:

    gdb --batch -ex "print/f (float *) 0x436A508C"
    

    输出:

    1 美元 = 234.314636

    来源:Using the linux command line in bash as a programmer's calculator

    【讨论】:

    • 带 xargs:echo "0x436A508C" | xargs -I {} gdb --batch -ex "print/f (float *) {}"
    【解决方案3】:

    像这样?

    $ crackNum --sp 436A508C
                      3  2          1         0
                      1 09876543 21098765432109876543210
                      S ---E8--- ----------F23----------
              Binary: 0 10000110 11010100101000010001100
                 Hex: 436A 508C
           Precision: SP
                Sign: Positive
            Exponent: 7 (Stored: 134, Bias: 127)
           Hex-float: +0x1.d4a118p7
               Value: +234.31464 (NORMAL)
    

    您可以在crackNum 周围编写一个包装器以摆脱0x 或对输出进行后处理。

    crackNum是一个Haskell程序,你可以从hackage下载它:http://hackage.haskell.org/package/crackNum

    【讨论】:

      【解决方案4】:

      od -tfD 转换为双精度浮点数。 od -tfF 将转换为单精度浮点数并给出预期的结果。

      echo -ne "\x00\xb7\x4e\x47" | od -tfF
      0000000           52919
      0000004
      

      也可以使用Hexdump。 -e 告诉 hexdump 使用格式字符串输出。 1/4 告诉 hexdump 使用 4 个字节进行转换。 %f 是输出到浮点数。

      echo -ne "\x00\xb7\x4e\x47" | hexdump -e '1/4 "%f" "\n"'
      52919.000000
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 2023-03-08
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 2014-06-18
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        相关资源
        最近更新 更多