2010-07-01 44 views
3

使用Python的陣列初始化c_int的陣列,我可以初始化使用以下(不完全Python化,當然)一個32487834整數陣列(在文件中發現HR.DAT)命令:ctypes的通過讀取文件

F = open('HR.DAT','rb') 
HR = array('I',F.read()) 
F.close() 

我需要在ctypes中做同樣的事情。到目前爲止,我擁有的最好的是:

HR = c_int * 32487834 

我不知道如何使用HR.DAT初始化數組的每個元素。有什麼想法嗎?

感謝,

邁克

回答

8

File對象具有可用於填充 'readinto(..)' 方法支持緩衝區接口的對象。

所以,這樣的事情應該工作:

f = open('hr.dat', 'rb') 
array = (c_int * 32487834)() 
f.readinto(array) 
+0

謝謝,這工作,並且非常有效。請編輯,以便我可以投票(昨天無意中將其鎖定)。 – MikeRand 2010-07-02 19:12:30

1

嘗試是這樣的轉換陣列的ctypes陣列

>>> from array import array 
>>> a = array("I") 
>>> a.extend([1,2,3]) 
>>> from ctypes import c_int 
>>> ca = (c_int*len(a))(*a) 
>>> print ca[0], ca[1], ca[2] 
1 2 3 
+0

有這個問題是'*了'返回數組元素,這需要整個事情加載到內存中的元組(如果'了'是一個迭代器),然後轉換爲Python類型(僅用於轉換回ctypes)。 – Kos 2012-12-11 12:02:57