2009-09-18 161 views
5

Cプログラムによって作成されたバイナリファイルがいくつかあります。ファイルのPythonのctypesとreadintoを使用して配列を含む構造体を読み取るには?

一つのタイプは、ファイルに次のC構造を記述するためにfwriteのを呼び出すことによって作成された:Pythonで

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

} easyStruc; 

を次のように、私は、このファイルの構造体をお読みください。

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

こと正常に動作します。私たちの他のタイプのファイルは次の構造を使って作成されます:

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

私はPythonでどのように構造を作成するのか分かりません。

答えて

9

このdocumentation page(セクション。:15.15.1.13配列)によると:

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

他の例については、そのドキュメントページをチェックし、それはのようなものでなければなりません。

+0

ありがとうございます!どのように私はそれを逃したか分からない。 –

2

arrays in ctypesに関するセクションがドキュメントにあります。 これは基本的には以下を意味します:

class structWithArray(Structure): 
    _fields_ = [ 
     ("foo", c_ulong), 
     ("barFloat", c_float * 4), 
     ("bowFloat", c_float * 17) 
    ] 
関連する問題