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

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

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

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

1 ответ

Решение

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 класс памяти

Другие вопросы по тегам