代码之家  ›  专栏  ›  技术社区  ›  MikeRand

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

  •  4
  • MikeRand  · 技术社区  · 16 年前

    使用python数组,我可以使用以下(当然不是完美的pythonic)命令初始化32487834整数数组(在hr.dat文件中找到):

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

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

    HR = c_int * 32487834
    

    我不知道如何使用hr.dat初始化数组的每个元素。有什么想法吗?

    谢谢,

    迈克

    2 回复  |  直到 16 年前
        1
  •  9
  •   Thomas Heller    16 年前

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

    所以,这样的方法应该有效:

    f = open('hr.dat', 'rb')
    array = (c_int * 32487834)()
    f.readinto(array)
    
        2
  •  1
  •   Anurag Uniyal    16 年前

    尝试这样的方法将数组转换为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