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

标签 python string floating-point hex double

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

相关文章:

Python3查找2个列表中有多少差异才能相等

string - 在 BASH 中将字符串转换为 .在 float

java - 在某些情况下,将 Long 乘以 float 会导致错误

java - 检查字符串中的特定值

java - 使用 SHA-256 获取字符串后结果错误

ios - Swift - 使用哪些类型? NSString 或字符串

c++ - C++中函数重载的混淆

python - 如何从 GridSearchCV 中的每个折叠中获得准确性和 f1 分数?

python - Pycharm 中的命令窗口

python - if 语句未到达