2010-11-10 3 views
33

Si j'ai les 2 ensembles de code suivants, comment les coller ensemble? Comment appeler la fonction c avec une liste contiguë d'éléments dans x? J'ai essayé de lancer x dans un c_void_p, mais cela n'a pas fonctionné.Comment convertir une liste Python en un tableau C en utilisant ctypes?

J'ai aussi essayé d'utiliser quelque chose comme

x = c_void_p * 10 
for e in y: 
    x[i] = e 

mais cela devient une erreur de syntaxe.

Le code C veut clairement l'adresse d'un tableau. Comment puis-je faire en sorte que cela se produise?

Répondre

61

Le code suivant fonctionne sur des listes arbitraires:

import ctypes 
pyarr = [1, 2, 3, 4] 
arr = (ctypes.c_int * len(pyarr))(*pyarr) 
+0

" * pyarr "dans python ... Qu'est-ce que cela signifie? – AaronYC

+4

@AaronYC Je suis désolé pour la confusion; 'pyarr' est une liste python ordinaire, comme' pyar = [1,2,3,4] '. Si vous vous interrogez sur l'étoile avant le nom, vérifiez cela: http://stackoverflow.com/questions/400739/what-does-mean-in-python –

+1

Merci beaucoup ... Le lien que vous avez donné est ce dont j'avais besoin ... – AaronYC

8

De the ctypes tutorial:

>>> IntArray5 = c_int * 5 
>>> ia = IntArray5(5, 1, 7, 33, 99) 
+0

Essayez de créer des tableaux plus avec 255 articles. –

+2

Fonctionne avec plus de 255 éléments: 'IntArray300 = c_int * 300; arrayWith300Elements = IntArray300 (* liste ([i pour i dans la plage (300)])) ' –

Questions connexes