Выставить C ++ буфер как Python 3 байта

Используя Boost :: Python, есть ли способ сделать необработанный буфер C ++ доступным для Python 3.2 как bytes объект?

Есть ответ Python 2 на очень похожий вопрос, но PyBuffer_FromReadWriteMemory описанная функция больше не существует в Python 3.

редактировать: благодаря ответу user2167433, что я на самом деле хочу, это только для чтения memoryview объект, а не bytes объект (используя memoryview избегает копирования в буфер, я считаю).

3

Решение

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 — это способ Python для доступа к объектам, которые поддерживают интерфейс буфера.

C API memoryview
класс памяти

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]