我第一天使用 Python。
我喜欢过滤 C 生成的跟踪文件。 来自 C 的每个 double 在文件中被格式化为 代表 64 位 double 的 32 位的两个十六进制字符串。
例如1234567890.3(C双)
内部文件:
0xb4933333
0x41d26580
我如何解析和组合它以进一步使用 Python float ?
提前致谢
最佳答案
您可以使用 struct
,对“double”使用“d”修饰符:
>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> struct.unpack('!d', (num2[2:]+num1[2:]).decode('hex'))[0]
1234567890.3
请注意附加 double 的顺序,上面假设是大端机器。另外,我删除了 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
关于python - 从以两个十六进制字符串传输的 C double 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713569/