ich ein Python-Wörterbuch mit folgenden Einträgen haben:Konvertieren von Python-Wörterbuch zu ctypes Struktur
Tmp={'Name1': [10.0, 20.0, 'Title1', 1], 'Name2': [5.0, 25.0, 'Title2', 2]}
Ich möchte dies auf eine C-Funktion zu übergeben, wo die Funktion ist wie folgt definiert:
struct CA {
char *Keys;
float *Values;
char *Title;
int Index;
};
void myfunc (struct CA *in, int n);
Auf der Python-Seite habe ich eine äquivalente Ctypes-Struktur wie folgt erstellt:
class CA(ctypes.Structure):
_fields_ = [("Keys", ctypes.POINTER(ctypes.c_char_p)),
("Values", ctypes.POINTER(ctypes.c_float)),
("Title", ctypes.POINTER(ctypes.c_char_p)),
("Index", ctypes.c_int)]
und ein Array von CA erstellt mit:
CAarray = CA * 2
Jetzt möchte ich Tmp zu CAarray in einer Schleife vergeben, so dass
k = Tmp.keys()
for (j, _) in enumerate(k):
CAarray[j].Keys = _
CAarray[j].Values = Tmp[_][:2]
CAarray[j].Title = Tmp[_][2]
CAarray[j].Index = Tmp[_][3]
Ich habe kämpfen die Syntax korrekt zu bekommen, und sind bisher gescheitert. Hilfe.
Auf der Seite gibt es eine Routine/lib, die Interkonvertierung zwischen Python-Variablen und Ctypes-Variablen umgehen kann?
Leider rolika, funktioniert es nicht. Wenn ca_array an C-Funktion myfunc übergeben wird (siehe die Abfrage), bekomme ich alle vermasselten Werte. Beachten Sie, dass das erste Argument von myfunc ein Array der Struktur CA ist. – Rak