获取Cython指针的值

时间:2014-07-15 17:01:43

标签: python c pointers cython

我正在编写一个构造malloc'd unsigned char *数组的函数,然后返回指针。在纯Cython或C中,这很容易。您所要做的就是在函数上设置返回类型,并将指针返回到数组。完成。但是,我已经达到了一个点,我需要将一个指向Cython中创建的数组的指针返回给Python。我知道指针只是内存地址。有没有什么方法可以返回一个Cython指针到Python作为python对象(如int或hex,因为内存地址本质上是一个数字),所以我基本上可以管理python中的指针?

我试图像这样返回指针的值:

cdef unsigned char array[8]

def return_pointer():
    return &array

这当然不起作用,因为转换不能完成。 Cython抱怨Cannot convert 'unsigned char (*)[8]' to Python object。有什么建议吗?

编辑:

我不需要访问Python中指针引用的内存地址中的值,只传递指针。然后我计划使用Python对象指针,并用它作为参数调用c函数。

1 个答案:

答案 0 :(得分:14)

您可以将指针强制转换为适当的C类型,然后由Cython将其转换为Python整数。正确的C类型是来自uintptr_t的{​​{1}},在Cython中可以通过<stddef.h>获得。演员阵容当然是from libc.stdint cimport uintptr_t