Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取Cython指针的值_Python_C_Pointers_Cython - Fatal编程技术网

Python 获取Cython指针的值

Python 获取Cython指针的值,python,c,pointers,cython,Python,C,Pointers,Cython,我正在编写一个函数,它构造一个malloc'd无符号字符*数组,然后重新运行指针。在纯Cython或C中,这很简单。您所要做的就是在函数上设置一个返回类型,并返回指向数组的指针。完成。然而,我已经到了需要将指向Cython中创建的数组的指针返回Python的地步。我知道指针就是内存地址。是否有任何方法可以将指向Python的Cython指针作为Python对象返回(例如int或hex,因为内存地址本质上是一个数字),这样我就可以基本上在Python中管理指针 我尝试返回指针的值,如下所示: cd

我正在编写一个函数,它构造一个malloc'd
无符号字符*
数组,然后重新运行指针。在纯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

编写的,有几个选项,任何一个(如果有的话)正确与否在很大程度上取决于您试图实现的目标。我的函数是否提供了一个可以缩小范围的特定示例?不,所有选项都是从指针开始的。与中一样,您的函数也可以同样轻松地转换为它们中的任何一个。顺便说一下,您的示例函数是错误的。它返回一个指向在返回后解除分配的本地元素的指针,并创建一个指向整个数组的指针(type
unsigned char(*)[N]
),而不是强制它指向第一个元素的指针(type
unsigned char*
)虽然最终在技术上是同一个地址,但它更为常见和有用。好的,我编辑了本地数组,但问题是,当我创建一个指向第一个元素的无符号字符指针并返回它时,Python将其视为一个字符串并打印随机内存。我错过了什么吗?是的,这是一个选择,显然这不是你想要的。你也可以把指针变成
int
,你可以构造
ctypes
指针,你甚至可以创建
cffi
指针等等。除非你解释你想做什么,否则没有人能帮你决定哪一个是正确的,这还允许我将一个uintptr_t类型从python强制转换为一个无符号字符数组。这正是我需要的,谢谢!很好的回答,只是关于进口的一个小小的修正。它应该是
cimport
而不是
import
,才能工作。@sirfz谢谢,已修复。如何将整数转换并转换回指针?@DavoudTaghawi-Nejad您需要将整数转换回适当的指针类型。在OP关于字符的问题中,这意味着做
my\u uintpttrs\u name