我想将此十六进制字符串'8436d4ccd436d3333'
转换为IEEE浮点数。我尝试使用struct.unpack
执行此操作,但它需要长度为4的字符串参数。
struct.unpack('>f', binascii.unhexlify('8436d999a436e0000'))
我使用此网站验证我的转化尝试是否正确:https://gregstoll.dyndns.org/~gregstoll/floattohex/但我找不到办法执行此操作。
感谢您的帮助
答案 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'