Используя Boost :: Python, есть ли способ сделать необработанный буфер C ++ доступным для Python 3.2 как bytes
объект?
Есть ответ Python 2 на очень похожий вопрос, но PyBuffer_FromReadWriteMemory
описанная функция больше не существует в Python 3.
редактировать: благодаря ответу user2167433, что я на самом деле хочу, это только для чтения memoryview объект, а не bytes
объект (используя memoryview
избегает копирования в буфер, я считаю).
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 для доступа к объектам, которые поддерживают интерфейс буфера.
Других решений пока нет …