2009-09-18 18 views
5

Tenemos algunos archivos binarios creados por un programa C.¿Cómo leer una estructura que contiene una matriz usando los tipos de Python y readinto?

Un tipo de archivo se crea llamando fwrite para escribir la siguiente estructura C a presentar:

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

} easyStruc; 

En Python, leí las estructuras de este archivo de la siguiente manera:

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

Eso funciona bien. Nuestro otro tipo de archivo se crea utilizando la siguiente estructura:

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

No estoy seguro de cómo crear la estructura en Python.

Respuesta

9

De acuerdo con esto (sección.: 15.15.1.13 Arrays) documentation page, debería ser algo así como:

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

Compruebe que la página de documentación para otros ejemplos.

+0

Gracias! No estoy seguro de cómo me perdí esa. –

2

Hay una sección sobre arrays in ctypes en la documentación. Básicamente esto significa:

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