Resize ctypes array

Scott Sibley sisibley at gmail.com
Thu May 28 02:25:53 EDT 2009


I'd like to resize a ctypes array. As you can see, ctypes.resize doesn't
work like it could. I can write a function to resize an array, but I wanted
to know some other solutions to this. Maybe I'm missing some ctypes trick or
maybe I simply used resize wrong. The name c_long_Array_0 seems to tell me
this may not work like I want. What is resize meant for?

>>> from ctypes import *
>>> c_int * 0
<class '__main__.c_long_Array_0'>
>>> intType = c_int * 0
>>> foo = intType()
>>> foo
<__main__.c_long_Array_0 object at 0xb7ed9e84>
>>> foo[0]
Traceback (most recent call last):

  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> resize(foo, sizeof(c_int * 1))
>>> foo[0]
Traceback (most recent call last):

  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> foo
<__main__.c_long_Array_0 object at 0xb7ed9e84>

Maybe go with something like:

>>> ctypes_resize = resize
>>> def resize(arr, type):
...     tmp = type()
...     for i in range(len(arr)):
...         tmp[i] = arr[i]
...     return tmp
...
...
>>> listType = c_int * 0
>>> list = listType()
>>> list = resize(list, c_int * 1)
>>> list[0]
0
>>>


But that's ugly passing the type instead of the size. It works for its
purpose and that's it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090528/fbcbc28b/attachment.html>


More information about the Python-list mailing list