我有如下C函數:的交流功能CTYPE返回類型
char* hash_id_G1(char *str){
char hash[20];
...
return hash;
}
我需要的是像這裏的一個部分功能,將採取在字符數組,並返回一個字符數組或指針到字符。
我將這些編譯成共享,然後使用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。當我這樣做時,代碼崩潰了seg故障。
我需要從python中逐一調用c庫中的函數。這些函數通常會返回加密。我怎樣才能定義這些函數,以便他們接受來自ctype接口的字符串並以某種可存儲形式返回加密?
任何幫助表示讚賞。我用C指針和相關的東西很弱。在此先感謝
UPDATE
段故障是因爲編譯錯誤。如果函數返回一個無符號字符,我將如何在C中聲明ctype變量?
hash_id_G1()函數返回什麼?它是以空字符結尾的字符串還是固定的已知大小的字符串?在後一種情況下,您需要將restype聲明爲'POINTER(c_char * 40)'。 – 2013-03-04 09:00:48
我已更新代碼@armin。如圖所示,它返回指向char數組的指針。 – Ajoy 2013-03-04 09:41:47
看起來分割問題是由於編譯時一些不好的選項造成的。該代碼產生預期的結果。我已更新我的帖子。 – Ajoy 2013-03-04 10:00:57