【问题标题】:How to convert 16bit hexadecimal and binary representations to decimal float (and vice versa) in python?如何在 python 中将 16 位十六进制和二进制表示形式转换为十进制浮点数(反之亦然)?
【发布时间】:2019-10-15 02:42:09
【问题描述】:

我正在解决一个问题,该问题需要我将浮点数的十六进制和二进制 FP16 表示转换为十进制浮点数。我还需要将十进制浮点数转换为 FP16 十六进制和二进制表示。

FP32 数字的转换有很多解决方案。但我特别需要FP16 表示

我已经找到了 FP16 二进制转十进制浮点数的解决方案:

a = struct.pack("H",int("0010100011110101",2))

float = np.frombuffer(a, dtype =np.float16)[0]

基本上我想要的是:

FP16 二进制 -> 十进制浮点数 (0010100011110101 -> 0.0387268066)

FP16 十六进制 -> 十进制浮点数 (28f5 -> 0.0387268066)

十进制浮点数 -> FP16 二进制 (0.0387268066 -> 0010100011110101)

十进制浮点数 -> FP16 十六进制 (0.0387268066 -> 28f5)

【问题讨论】:

    标签: python struct binary formatting hex


    【解决方案1】:

    所以,经过一番研究,我找到了解决方案,我将其发布在这里,供任何可能需要的人使用。

    import struct
    import numpy as np
    bin = "0010100011110101"
    hex = "28f5"
    dec_float = 0.03872680
    

    FP16 二进制转十进制浮点数

    y = struct.pack("H",int(bin,2))
    float = np.frombuffer(y, dtype =np.float16)[0]
    

    FP16 十六进制转十进制浮点数

    y = struct.pack("H",int(hex,16))
    float = np.frombuffer(y, dtype =np.float16)[0]
    

    十进制浮点数转FP16二进制

    binary = struct.unpack('H',struct.pack('e',dec_float))[0]
    binary = bin(binary)
    binary = binary[2:]
    binary = "0"*2 + binary
    

    十进制浮点数到 FP16 十六进制

    hexa = struct.unpack('H',struct.pack('e',dec_float))[0]
    hexa = hex(hexa)
    hexa = hexa[2:]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2012-09-18
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多