C和Python中的数据编码

2024-10-06 11:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了以下问题。我想用Python把它们写进二进制文件中。当我使用python函数时

with open("test.dat","rb") as dfile:
    data = dfile.read()

它给了我

b'\x00\x00\x00\x00\x00\x00\xf8?\x00\x00\x00\x00\x00\x00\x04@\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00\x00\x00\x00\x11@'

所以我试着用data.decode()解码,结果却给了我解码错误。我想是因为我使用了错误的编码类型。但我试了ascii和{},但它们都没用。因此,我的问题有两个方面:

  1. 如何在不知道编码类型的情况下读取二进制文件?

  2. 既然我在用c编写二进制文件时没有给出编码类型,那么c对数据进行编码吗?如果是,那将是哪种编码类型?

仅供参考,我最初用来写二进制文件的代码是

^{pr2}$

Tags: 文件函数test类型编码data错误with
3条回答

您需要将C类型转换为Python类型。在标准库here中使用struct.unpack。在

在本例中,格式字符串是dddd,意思是4个双精度。当在不同的编译器和机器之间移动C类型时,困难就来了。在

import struct

with open('test.dat', 'rb') as dfile:
    data = dfile.read()

result = struct.unpack("dddd", data)
print(result)

给出一个元组:

^{pr2}$

如果您愿意使用numpy,请使用^{}

with open("test.dat","rb") as dfile:
    data = np.fromfile(dfile)

大的python数组可能比你在大的python生态系统中更容易操作。在

您可以使用python标准array模块:

from array import array

u = array('d')

with open('test.dat', 'rb') as f:
    data = f.read()
    u.frombytes(data)
    print(u)
    print(u.tolist())

输出:

^{pr2}$

相关问题 更多 >