用 c++ 编写二进制文件并用 python 读取
Writing binary in c++ and read in python
我想用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)
相关文章:
- 如何使用Python从C++中读取谷物序列化数据
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 是否可以使用 Python csv 阅读器读取使用 C++ std::setw 生成的文件?
- 从 c++ 到 python 的二进制读取器
- 在 c++ 中逐行读取文件(将代码从 Python 转换为 C++)
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- C++输出与Python不同的消息(从串行端口读取)
- 在python swig中读取c ++ 2d数组
- 如何使用 Python 在文本文件中读取和写入多个值?
- 如何改进 Python C 扩展文件行读取
- 为什么这种逐行文件读取在 c++ 中比在 Python 中慢得多
- 通过插座读取Python中的OpenCV图像
- 同时使用 Python 和 C++ 运行读取和写入文件
- GDB Python模块读取内存内容
- 哪些数据文件从python(或其他)中读取的C 输出格式更有效
- 读取在python中使用C++生成器创建的文件
- 用 c++ 编写二进制文件并用 python 读取
- 在Qt应用程序中读取python脚本C++输出
- 从Python读取输入,并在循环时打印出来
- 使用 Python 读取 Middlebury 'flow' 文件 (bytes array & numpy)