我在Python的第一天。
我喜欢过滤C生成的跟踪文件。 C中的每个双精度格式都在文件中 两个十六进制字符串代表64位双精度的32位。
e.g。 1234567890.3(C double)
内部文件:
0xb4933333
0x41d26580
如何解析并组合它以进一步使用Python float?
提前致谢
答案 0 :(得分:9)
您可以使用struct
,使用'd'修饰符代替'double':
>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> struct.unpack('!d', (num2[2:]+num1[2:]).decode('hex'))[0]
1234567890.3
要小心你追加双打的顺序,上面假设是一个大端机器。另外,我剥离了0x
,因为decode
函数不期望它。
编辑:如果您使用的是Python 3,则需要使用bytes.fromhex
代替''.decode('hex')
。
只是提供一个替代方案(以上是一个非常好的解决方案):
>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> low_word = int(num1, 16)
>>> high_word = int(num2, 16)
>>> representation = struct.pack('>II', high_word, low_word)
>>> result = struct.unpack('>d', representation)
>>> result[0]
1234567890.3
答案 1 :(得分:0)
以下是浮点的IEEE标准及其创建方式: