我有一个pythonmemoryview
指向一个bytes
对象,我想用cython对其执行一些处理。在
我的问题是:
bytes
对象不可写,cython不允许从它构造类型化(cython)memoryview示例:
在python中:
array = memoryview(b'abcdef')[3:]
在cython中:
cdef char * my_ptr = &array[0]
编译失败,返回消息:Cannot take address of Python variable
cdef char[:] my_view = array
在运行时失败,返回消息:BufferError: memoryview: underlying buffer is not writable
如何解决这个问题?在
可以使用
bytearray
创建可变内存视图。请注意,这不会更改字符串,只更改bytearray
使用
bytearray
(根据@CheeseLover的回答)可能是正确的做法。我的建议是完全在bytearrays
中工作,从而避免临时转换。但是:^{} can be directly created from a Python string (或
bytes
)-参见链接部分的末尾:一些警告:
bytes
是不可变的,如果试图修改该memoryview很可能会导致问题my_ptr
(因此mview
)只有在{好的,在研究了pythonapi之后,我找到了一个解决方案,可以在memoryview中获得指向
bytes
对象缓冲区的指针(这里称为bytes_view = memoryview(bytes())
)。也许这对其他人有帮助:相关问题 更多 >
编程相关推荐