用 c++ 编写二进制文件并用 python 读取

Writing binary in c++ and read in python

本文关键字:python 读取 c++ 二进制文件      更新时间:2023-10-16

我想用c++将一系列数字存储到二进制文件中,以便稍后使用python打开。目前我有以下名为 *writer.cpp 的 c++ 脚本:

#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 二进制文件.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。

fromfile默认采用浮点数。如果要更改此行为,则需要传入 dtype 命名参数中的类型。

当你在写ints时,这应该有效:

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