我想使用c将一系列数字存储到二进制文件中,以便稍后使用python打开。目前我有以下c脚本,名为 *writer.cpp:
#include <fstream>
int main()
{
std::ofstream outFile;
outFile.open("binaryFile.bin", std::ios::binary);
int number = 0;
for (int i=0; i<10; i++){
number += i;
outFile.write(reinterpret_cast<const char*>(&number), sizeof(int));
}
outFile.close();
return 0;
}
当编译为
g++ -o writerTest.x writer.cpp
并运行为
./writerTest.x
生成名为“binaryFile.bin”的二进制文件。
然后,我尝试使用Python和以下名为 reader.py 的脚本来读取它:
import numpy as np
from sys import argv
path = str(argv[1])
x = np.fromfile(path)
print x, type(x)
将其作为python reader.py binaryFile.bin运行会产生以下结果
[ 2.12199579e-314 1.27319747e-313 3.18299369e-313 5.94158822e-313
9.54898106e-313] <type 'numpy.ndarray'>
这显然不是我所希望的。我做错了什么,应该如何正确地做到这一点?
3条答案
按热度按时间beq87vna1#
您必须指定要阅读的值的类型,
numpy
无法猜测,因为文件本身没有存储元数据。所以在你的情况下,你必须做这样的事情:如果你正在做这样的事情,强烈建议使用固定大小的整数,而不仅仅是
int
,例如。在C++中,可以从<cstdint>
使用int32_t
,在Python中,可以将int32
指定为dtype。e5nqia272#
fromfile
默认采用浮点数。如果你想改变这种行为,你需要在dtype
命名参数中传递类型。当你在写int时,这个 * 应该 * 工作:
r7knjye23#
下面是一个示例代码,展示了如何在C中编写二进制数据并在Python中读取它:
在C中:
在Python中:
使用open('test.bin','rb')作为f:
B = f.read()data = list(struct.unpack('i ' *(len(b)// 4),b))print(data)
注意:这假设二进制数据包含整数。对于其他数据类型,您需要相应地修改代码。查看更多详情:https://letchatgpt.com/read-in-python-c-write-binary-file-from-vector/