获取指向字节对象上的python内存视图的指针

2024-04-23

我有一条蟒蛇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(使用前将#替换为@)

获取指向字节对象上的python内存视图的指针 的相关文章

随机推荐