我有一条蟒蛇memoryview
指向一个bytes
我想在 cython 中执行一些处理的对象。
我的问题是:
- 因为
bytes
对象不可写,cython 不允许从中构造类型化(cython)内存视图
- 我也无法使用指针,因为我无法获取指向内存视图开始的指针
Example:
在Python中:
array = memoryview(b'abcdef')[3:]
在赛通中:
-
cdef char * my_ptr = &array[0]
编译失败并显示以下消息:Cannot take address of Python variable
-
cdef char[:] my_view = array
运行时失败并显示消息:BufferError: memoryview: underlying buffer is not writable
如何解决这个问题?
好的,在深入研究 python api 之后,我找到了一个解决方案来获取指向bytes
内存视图中对象的缓冲区(这里称为bytes_view = memoryview(bytes())
)。也许这对其他人有帮助:
from cpython.buffer cimport PyObject_GetBuffer, PyBuffer_Release, PyBUF_ANY_CONTIGUOUS, PyBUF_SIMPLE
cdef Py_buffer buffer
cdef char * my_ptr
PyObject_GetBuffer(bytes, &buffer, PyBUF_SIMPLE | PyBUF_ANY_CONTIGUOUS)
try:
my_ptr = <char *>buffer.buf
# use my_ptr
finally:
PyBuffer_Release(&buffer)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)