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

时间:2017-05-18 16:07:29

标签: python struct floating-point hex data-conversion

我想将此十六进制字符串'8436d4ccd436d3333'转换为IEEE浮点数。我尝试使用struct.unpack执行此操作,但它需要长度为4的字符串参数。

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

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

为了加强合理性,我通过编码相应的1位数小数点值来获得:

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