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

发布于 2024-11-24 10:01:27 字数 232 浏览 1 评论 0原文

我使用 Python 的第一天。

我喜欢过滤由 C 生成的跟踪文件。 C 中的每个双精度数在文件中的格式如下 两个十六进制字符串,代表 64 双精度数的 32 位。

例如 1234567890.3(C 双)
内部文件:

0xb4933333
0x41d26580

如何解析和组合它以进一步使用 Python 浮点数?

提前致谢

my very first day with Python.

I like to filter on a trace file generated by C.
Each double from C is formatted in the file by
two hex strings representing 32 bit of the 64 double.

e.g. 1234567890.3 (C double)
inside file:

0xb4933333
0x41d26580

How can I parse and combine it to further work with a Python float?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酸甜透明夹心 2024-12-01 10:01:27

您可以使用struct,对“double”使用“d”修饰符:

>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> struct.unpack('!d', (num2[2:]+num1[2:]).decode('hex'))[0]
1234567890.3

请注意附加双精度数的顺序,上面假设是大端机器。另外,我删除了 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

You can use struct, using the 'd' modifier for 'double':

>>> import struct
>>> num1 = '0xb4933333'
>>> num2 = '0x41d26580'
>>> struct.unpack('!d', (num2[2:]+num1[2:]).decode('hex'))[0]
1234567890.3

Be careful what order you append the doubles in, the above assumes a big-endian machine. Also, I stripped 0x as the decode function doesn't expect it.

edit: If you're using Python 3, you need to use bytes.fromhex instead of ''.decode('hex').


Just to give an alternative (the above is a very nice solution):

>>> 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
奶茶白久 2024-12-01 10:01:27

以下是浮点的 IEEE 标准及其创建方式:

http: //www.psc.edu/general/software/packages/ieee/ieee.php

Here is a the IEEE standard for floating points and how it is created:

http://www.psc.edu/general/software/packages/ieee/ieee.php

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文