在c中编写二进制文件并在python中读取

我想使用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'>

这显然不是我所希望的.我做错了什么,应该如何妥善完成?

最佳答案 你必须指定你将要读取的值的类型,numpy没有办法猜测,因为文件本身没有存储元数据.因此,在您的情况下,您必须执行以下操作:

x = np.fromfile(path, dtype=int)

如果您正在做这样的事情,强烈建议使用固定大小的整数而不仅仅是int,例如在C中你可以使用< cstdint>中的int32_t.在Python中,您可以将int32指定为dtype.

点赞