gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:56:58 25 4
gpt4 key购买 nike

我第一天使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com