python - 在 C++ 中编写二进制文件并在 Python 中读取

标签 python c++ numpy binary

我想使用 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 二进制文件.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++ 中你可以使用 int32_t来自 <cstdint>在 Python 中你可以指定 int32作为数据类型。

关于python - 在 C++ 中编写二进制文件并在 Python 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503346/

相关文章:

python - Numpy 随机数生成在矢量化后运行速度变慢

python - 标记曲线之间的最大偏差/距离

python - cv 高斯模糊中 0,0 的内核大小?

c++ - 帮助将字符串转换为 double?

c++ - 使用 STL 的类模板无法编译

python - 根据条件迭代 Pandas 列

python - cpython的列表类型的实现在哪里?

python - 在列表中查找包含未知值的元组结构

c++ - 如何在可变参数包中找到 "min"类型?

python - 连接存储在 numpy 数组中的两个数据表的有效方法是什么?