Wie konvertiere ich eine Python-Liste in ein C-Array mit Ctypes?
Wenn ich die Folgen 2 Sätze von code, wie kann ich die zusammenkleben?
void
c_function(void *ptr) {
int i;
for (i = 0; i < 10; i++) {
printf("%p", ptr[i]);
}
return;
}
def python_routine(y):
x = []
for e in y:
x.append(e)
Wie kann ich rufen Sie die c_function mit einer zusammenhängenden Liste von Elementen in x? Ich habe versucht, den cast von x zu einem c_void_p, aber das hat nicht funktioniert.
Ich habe auch versucht, etwas zu verwenden, wie
x = c_void_p * 10
for e in y:
x[i] = e
aber dieser bekommt einen syntax-Fehler.
Den C-code klar will die Adresse eines Arrays. Wie bekomme ich diese zu passieren?
InformationsquelleAutor der Frage No One in Particular | 2010-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der folgende code funktioniert auf beliebigen Listen:
InformationsquelleAutor der Antwort Gabi Purcaru
Vom das ctypes-tutorial:
InformationsquelleAutor der Antwort Ryan Ginstrom
Dies ist eine Erklärung für die akzeptierte Antwort.
ctypes.c_int * len(pyarr)
erstellt ein array (Sequenz) der Typc_int
der Länge 4 (Python ist3python 2). Dac_int
ist ein Objekt, dessen Konstruktor ein argument,(ctypes.c_int * len(pyarr)(*pyarr)
muss ein one-shot-init jederc_int
Instanz vonpyarr
. Ein einfacher zu Lesen form ist:Verwenden
type
Funktion zu sehen, der Unterschied zwischenseq
undarr
.InformationsquelleAutor der Antwort akhan