Wol*_* R. 8 python string floating-point double hex
我在Python的第一天.
我喜欢过滤由C生成的跟踪文件.来自C的每个双重格式在文件中由两个十六进制字符串格式化,表示64位双精度的32位.
例如1234567890.3(C double)
文件内:
0xb4933333
0x41d26580
Run Code Online (Sandbox Code Playgroud)
我如何解析并组合它以进一步使用Python float?
提前致谢
你可以使用struct'd'修饰符'double':
>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> struct.unpack('!d', (num2[2:]+num1[2:]).decode('hex'))[0]
1234567890.3
Run Code Online (Sandbox Code Playgroud)
小心你追加双打的顺序,上面假设一个大端机器.此外,我剥离,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |