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

时间:2014-04-14 15:43:56

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

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

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

修改:感谢user2167433的回答,我真正想要的是一个只读memoryview对象,而不是bytes对象(使用{{1}避免复制我认为的缓冲区。

1 个答案:

答案 0 :(得分:10)

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&gt; = 3.3:

我知道如何使用PyMemoryView_FromMemory的最佳方式:

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

memoryview是访问支持缓冲区接口的对象的Python方法。

C API memoryview memoryview class