我想使用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
生成名为&#34; binaryFile.bin&#34;。
的二进制文件然后我尝试使用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'>
这显然不是我所希望的。我做错了什么,应该如何妥善完成?
答案 0 :(得分:4)
您必须指定要阅读的值的类型,numpy
无法猜测,因为文件本身中没有存储元数据。因此,在您的情况下,您必须执行以下操作:
x = np.fromfile(path, dtype=int)
如果你正在做这样的事情,强烈建议使用固定大小的整数而不仅仅是int
,例如在C ++中,您可以使用int32_t
中的<cstdint>
,在Python中,您可以将int32
指定为dtype。
答案 1 :(得分:3)