【发布时间】:2013-02-18 04:31:16
【问题描述】:
我有一个 C 函数如下:
char* hash_id_G1(char *str){
char hash[20];
...
return hash;
}
我需要的是一些类似这里的函数,它们将接收一个 char 数组并返回一个 char 数组或指向该 char 的指针。
我会将这些编译成一个共享的so并使用ctypes将其导入python。
这就是我到目前为止所做的:
from ctypes import *
ibc = cdll.LoadLibrary('./libibc.so.1.0.1')
strin = 'sometext to hash'
ids = (c_char * 40)()
ids.value = strin
hash = c_char_p
hash_id = ibc.hash_id_G1
hash_id.restype = c_char_p
hash = hash_id(ids)
该库运行良好,但我无法设置 restype。当我这样做时,代码会因段错误而崩溃。
我需要从python中一一调用c库中的函数。这些函数通常返回加密。如何定义这些函数,以便它们接受来自 ctype 接口的字符串并以某种可存储的形式返回加密?
感谢任何帮助。我对 C 指针和相关的东西非常薄弱。提前致谢
更新
分段错误是因为编译错误。如果函数要返回一个无符号字符,我将如何在 C 中声明 ctype 变量?
【问题讨论】:
-
hash_id_G1() 函数返回什么?它是一个以 null 结尾的字符串,还是一个已知大小的固定字符串?在后一种情况下,您需要将 restype 声明为
POINTER(c_char * 40)。 -
我已经更新了代码@armin。如图所示,它返回指向 char 数组的指针。
-
似乎分段问题是由于编译时的一些错误选项造成的。该代码产生预期的结果。我已经更新了我的帖子。
-
该函数表现出未定义的行为,因为您返回一个指向临时对象的指针。您可以预期这种代码会出现段错误。