从两个十六进制字符串传输的C double转换

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?

提前致谢

yan*_*yan 9

你可以使用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)