使用 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++ - 将 C++ 缓冲区公开为 Python 3 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064407/