我想将此十六进制字符串'8436d4ccd436d3333'
转换为IEEE浮点。我尝试使用 struct.unpack 来执行此操作,但它需要长度为 4 的字符串参数。
struct.unpack('>f', binascii.unhexlify('8436d999a436e0000'))
我正在使用此网站来验证我的转换尝试是否正确:https://gregstoll.dyndns.org/~gregstoll/floattohex/但我找不到办法做到这一点。
感谢您的帮助
最佳答案
据猜测,每个十六进制字符串包含两个个单精度浮点值,而不是一个,并且初始的8
是正在执行的任何消息协议(protocol)的一部分使用过,而不是这些 float 的一部分。有了这个猜测,我得到了一些看似合理的数字:
>>> 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'
关于python - 如何将十六进制转换为 IEEE float python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44052818/