gpt4 book ai didi

python - C 和 Python 中的数据编码

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:05 27 4
gpt4 key购买 nike

我遇到了以下问题。我已经使用 C 将一些 double 类型的数据写入二进制文件,现在我想使用 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() 进行解码,然后它给了我解码错误。我想这是因为我使用了错误的编码类型。但是我尝试了 asciiutf-8 但它们没有用。因此,我的问题有两个:

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

  2. 由于我在用 c 编写二进制文件时没有给出编码类型,所以 c 是否对数据进行编码?如果是,那会是什么样的编码类型?

仅供引用,我首先用来编写二进制文件的代码是

#include <stdio.h>

int main(){
double buffer[4]= {1.5, 2.5, 3.25, 4.25};
FILE *ptr;

ptr = fopen("test.dat", "wb");
fwrite(buffer,sizeof(buffer),1,ptr);
printf("%ld\n",sizeof(buffer));

return 0;
}

最佳答案

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

在这种情况下,格式字符串是 dddd,表示 4 个 double 。在不同的编译器和机器之间移动 C 类型时会遇到困难。

import struct

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

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

给出一个元组:

(1.5, 2.5, 3.25, 4.25)

关于python - C 和 Python 中的数据编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155204/

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