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