2009-09-18 17 views
5

Wir haben einige Binärdateien von einem C-Programm erstellt.Wie lese ich eine Struktur, die ein Array enthält, mit den Ctypes von Python und readinto?

Eine Art von Datei durch den Aufruf von fwrite erstellt wird, die folgende C-Struktur zu schreiben in Datei:

typedef struct { 
    unsigned long int foo; 
    unsigned short int bar; 
    unsigned short int bow; 

} easyStruc; 

In Python, las ich die structs dieser Datei wie folgt:

class easyStruc(Structure): 
    _fields_ = [ 
    ("foo", c_ulong), 
    ("bar", c_ushort), 
    ("bow", c_ushort) 
] 

f = open (filestring, 'rb') 

record = censusRecord() 

while (f.readinto(record) != 0): 
    ##do stuff 

f.close() 

That funktioniert gut. Unsere andere Art von Datei wird erstellt mit der folgenden Struktur:

typedef struct { // bin file (one file per year) 
    unsigned long int foo; 
    float barFloat[4]; 
    float bowFloat[17]; 
} strucWithArrays; 

Ich bin mir nicht sicher, wie die Struktur in Python zu erstellen.

Antwort

9

Nach diesem documentation page (Abschnitt:. 15.15.1.13 Arrays):

class strucWithArrays(Structure): 
    _fields_ = [ 
    ("foo", c_ulong), 
    ("barFloat", c_float * 4), 
    ("bowFloat", c_float * 17)] 

Überprüfen Sie, ob Dokumentation Seite für weitere Beispiele, sollte es etwas ähnliches sein.

+0

Danke! Ich bin mir nicht sicher, wie ich das verpasst habe. –

2

Es gibt einen Abschnitt über arrays in ctypes in der Dokumentation. Grundsätzlich bedeutet das:

class structWithArray(Structure): 
    _fields_ = [ 
     ("foo", c_ulong), 
     ("barFloat", c_float * 4), 
     ("bowFloat", c_float * 17) 
    ] 
Verwandte Themen