Python 获取Cython指针的值
我正在编写一个函数,它构造一个malloc'dPython 获取Cython指针的值,python,c,pointers,cython,Python,C,Pointers,Cython,我正在编写一个函数,它构造一个malloc'd无符号字符*数组,然后重新运行指针。在纯Cython或C中,这很简单。您所要做的就是在函数上设置一个返回类型,并返回指向数组的指针。完成。然而,我已经到了需要将指向Cython中创建的数组的指针返回Python的地步。我知道指针就是内存地址。是否有任何方法可以将指向Python的Cython指针作为Python对象返回(例如int或hex,因为内存地址本质上是一个数字),这样我就可以基本上在Python中管理指针 我尝试返回指针的值,如下所示: cd
无符号字符*
数组,然后重新运行指针。在纯Cython或C中,这很简单。您所要做的就是在函数上设置一个返回类型,并返回指向数组的指针。完成。然而,我已经到了需要将指向Cython中创建的数组的指针返回Python的地步。我知道指针就是内存地址。是否有任何方法可以将指向Python的Cython指针作为Python对象返回(例如int或hex,因为内存地址本质上是一个数字),这样我就可以基本上在Python中管理指针
我尝试返回指针的值,如下所示:
cdef unsigned char array[8]
def return_pointer():
return &array
这当然不起作用,因为转换无法完成。Cython抱怨无法将“unsigned char(*)[8]”转换为Python对象。有什么建议吗
编辑:
我不需要访问Python中指针引用的内存地址中的值,只需传递指针。然后,我计划使用Python对象指针,并将其作为参数调用c函数。您可以将指针转换为适当的c类型,然后Cython将其转换为Python整数。正确的C类型是来自
的uintptpr\u t
,在Cython中可以通过libc.stdint cimport uintpr\u t的获得。当然,cast是由array\u或\u pointer
编写的,有几个选项,任何一个(如果有的话)正确与否在很大程度上取决于您试图实现的目标。我的函数是否提供了一个可以缩小范围的特定示例?不,所有选项都是从指针开始的。与中一样,您的函数也可以同样轻松地转换为它们中的任何一个。顺便说一下,您的示例函数是错误的。它返回一个指向在返回后解除分配的本地元素的指针,并创建一个指向整个数组的指针(typeunsigned char(*)[N]
),而不是强制它指向第一个元素的指针(typeunsigned char*
)虽然最终在技术上是同一个地址,但它更为常见和有用。好的,我编辑了本地数组,但问题是,当我创建一个指向第一个元素的无符号字符指针并返回它时,Python将其视为一个字符串并打印随机内存。我错过了什么吗?是的,这是一个选择,显然这不是你想要的。你也可以把指针变成int
,你可以构造ctypes
指针,你甚至可以创建cffi
指针等等。除非你解释你想做什么,否则没有人能帮你决定哪一个是正确的,这还允许我将一个uintptr_t类型从python强制转换为一个无符号字符数组。这正是我需要的,谢谢!很好的回答,只是关于进口的一个小小的修正。它应该是cimport
而不是import
,才能工作。@sirfz谢谢,已修复。如何将整数转换并转换回指针?@DavoudTaghawi-Nejad您需要将整数转换回适当的指针类型。在OP关于字符的问题中,这意味着做my\u uintpttrs\u name
。