ctypes通过读取文件初始化c_int数组

时间:2010-07-01 00:48:40

标签: python arrays initialization ctypes

使用Python数组,我可以使用以下(当然不是完美的Pythonic)命令初始化32,487,834整数数组(在文件HR.DAT中找到):

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

我需要在ctypes中做同样的事情。到目前为止,我所拥有的最好的是:

HR = c_int * 32487834

我不确定如何使用HR.DAT初始化数组的每个元素。有什么想法吗?

谢谢,

麦克

2 个答案:

答案 0 :(得分:9)

文件对象有一个'readinto(..)'方法,可用于填充支持缓冲区接口的对象。

所以,这样的事情应该有效:

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

答案 1 :(得分: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