Я пытаюсь передать данные из memoryview в массив ctypes, который отлично работает в Python 3.4, но не в Python 2.7.
Когда я бегу
from ctypes import c_byte
data = memoryview(b'012')
array = c_byte * 3
array.from_buffer_copy(data)
Я получаю <__main__.c_byte_Array_3 at 0x7f3022cb8730>
в Python 3.4, но в Python 2.7.6 я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a readable buffer object
В чем причина этой ошибки и как я могу заставить это работать в обоих случаях?
Я знаю, что могу преобразовать данные в байты, используя
array.from_buffer_copy(data.tobytes())
но я думаю, что это делает одну дополнительную копию данных и не является элегантным, поэтому я ищу лучшее решение (любые комментарии о том, эффективен ли метод tobytes
, также будут приветствоваться).
PyObject_AsReadBuffer
, который ищет старый слот протокола буфераbf_getreadbuffer
. Типmemoryview
этого не определяет; он использует новый интерфейсbf_getbuffer
. - person Eryk Sun   schedule 11.03.2015