获取Cython指针的值
我正在写一个函数,这个函数会创建一个用 malloc
分配的 unsigned char *
数组,然后返回这个数组的指针。在纯 Cython 或 C 中,这个过程很简单。你只需要设置函数的返回类型,然后返回数组的指针就行了,没问题。然而,我现在遇到一个问题,我需要把一个在 Cython 中创建的数组指针返回给 Python。我知道指针其实就是内存地址。有没有办法把 Cython 的指针作为 Python 对象(比如整数或十六进制,因为内存地址本质上就是一个数字)返回给 Python,这样我就可以在 Python 中管理这些指针了?
我尝试过这样返回指针的值:
cdef unsigned char array[8]
def return_pointer():
return &array
当然,这样做是行不通的,因为无法进行转换。Cython 报错说 Cannot convert 'unsigned char (*)[8]' to Python object
。有没有什么建议?
编辑:
我并不需要在 Python 中访问指针所指向的内存地址的值,只是想在不同地方传递这个指针。我打算使用这个 Python 对象指针,并将其作为参数调用 C 函数。
1 个回答
20
你可以把一个指针转换成合适的C语言类型,然后Cython会把它转成Python中的整数。正确的C类型是 uintptr_t
,这个类型在 <stddef.h>
这个文件里可以找到。在Cython中,你可以通过 from libc.stdint cimport uintptr_t
来使用它。转换的写法是 <uintptr_t>array_or_pointer
。