使用Boost :: Python,有没有办法让 Python 3.2 可以访问原始C ++缓冲区作为bytes
对象?
对very similar question有一个Python 2答案,但Python 3中不再存在所描述的PyBuffer_FromReadWriteMemory
函数。
修改:感谢user2167433的回答,我真正想要的是一个只读memoryview对象,而不是bytes
对象(使用{{1}避免复制我认为的缓冲区。
答案 0 :(得分:10)
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)))
我知道如何使用PyMemoryView_FromMemory的最佳方式:
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromMemory(data, dataSize, PyBUF_READ)));
memoryview是访问支持缓冲区接口的对象的Python方法。