2009-09-18 14 views
5

Mamy kilka plików binarnych utworzonych przez program C.Jak odczytać strukturę zawierającą tablicę przy użyciu ctypów Pythona i readinto?

Jeden typ pliku jest tworzony poprzez wywołanie fwrite napisać następującą strukturę C do pliku:

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

} easyStruc; 

w Pythonie, czytałem konstrukcjom tego pliku w następujący sposób:

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() 

Że działa w porządku. Nasz inny typ pliku jest tworzony przy użyciu następującej struktury:

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

Nie jestem pewien, jak utworzyć strukturę w Pythonie.

Odpowiedz

9

Według tego documentation page (pkt. 15.15.1.13 Array), powinno być coś takiego:

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

Sprawdź, czy strona Dokumentacja dla innych przykładów.

+0

Dzięki! Nie wiem, jak tęskniłem. –

2

W dokumentacji znajduje się sekcja o numerze arrays in ctypes. Zasadniczo oznacza to:

class structWithArray(Structure): 
    _fields_ = [ 
     ("foo", c_ulong), 
     ("barFloat", c_float * 4), 
     ("bowFloat", c_float * 17) 
    ] 
Powiązane problemy