如何将十六进制转换为 IEEE 浮点数 python

How to convert hex to IEEE floating point python

我想将此十六进制字符串 '8436d4ccd436d3333' 转换为 IEEE 浮点数。我尝试用 struct.unpack 来做到这一点,但它需要一个长度为 4 的字符串参数。

struct.unpack('>f', binascii.unhexlify('8436d999a436e0000'))

我正在使用此网站验证我的转换尝试是否正确:https://gregstoll.dyndns.org/~gregstoll/floattohex/但我找不到执行此操作的方法。

感谢您的帮助

据推测,每个十六进制字符串包含 两个 个单精度浮点值,而不是一个,并且初始 8 是 whatever 消息协议的一部分正在使用,而不是这些浮动的一部分。有了这个猜测,我得到了一些看似合理的数字:

>>> struct.unpack('>ff', binascii.unhexlify('436d4ccd436d3333'))
(237.3000030517578, 237.1999969482422)
>>> struct.unpack('>ff', binascii.unhexlify('436d999a436e0000'))
(237.60000610351562, 238.0)

为了加强可信度,这是我通过对相应的小数点后一位数值进行编码得到的结果:

>>> binascii.hexlify(struct.pack('>ff', 237.3, 237.2))
b'436d4ccd436d3333'
>>> binascii.hexlify(struct.pack('>ff', 237.6, 238.0))
b'436d999a436e0000'