c++ - 将 C++ 缓冲区公开为 Python 3 字节

标签 c++ python-3.x boost-python python-3.2

使用 Boost::Python,是否有办法使 Python 3.2 可以将原始 C++ 缓冲区作为 bytes 对象访问?

very similar question 有一个 Python 2 答案,但是那里描述的 PyBuffer_FromReadWriteMemory 函数在 Python 3 中不再存在。

编辑:感谢 user2167433 的回答,我真正想要的是一个只读的 memoryview对象,而不是 bytes 对象(我相信使用 memoryview 可以避免复制缓冲区)。

最佳答案

Python > 3 和 Python <= 3.2:

Py_buffer buffer;
int res = PyBuffer_FillInfo(&buffer, 0, data, dataSize, true, PyBUF_CONTIG_RO);
if (res == -1) {
    PyErr_Print();
    exit(EXIT_FAILURE);
}
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromBuffer(&buffer)))

Python >= 3.3:

我知道的最好方法是使用 PyMemoryView_FromMemory:

boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromMemory(data, dataSize, PyBUF_READ)));

memoryview 是访问支持缓冲区接口(interface)的对象的 Python 方式。

C API memoryview memoryview class

关于c++ - 将 C++ 缓冲区公开为 Python 3 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064407/

相关文章:

C++ Template Linked List storing Class Objects - Unhandled Exception Access Violation 读取位置

c++ - 如何像类一样为 std::function 实现类型橡皮擦?

python-3.x - 在没有类名的 Python 中获取枚举名

python - mock.patch 和 unittest.skip 之间的冲突

python - 使用Boost Python Numpy ndarray作为类成员变量

c++ - 如何快速搜索项目中所有包含的头文件以查找特定符号?

c++ - dbus - 如何设置包含路径

Python 3 : Insertion Sort comparisons counter

python - 构建引用 Boost 的 Python 包时出现 LNK1120

c++ - 如何将 C++ 对象转换为 boost::python::object?