Resize ctypes array

Scott Sibley sisibley at gmail.com
Thu May 28 02:50:01 EDT 2009


I found an answer to this over on Stackoverflow.
http://stackoverflow.com/questions/919369/resize-ctypes-array

On Thu, May 28, 2009 at 1:25 AM, Scott Sibley <sisibley at gmail.com> wrote:

> 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/63d01ba2/attachment-0001.html>


More information about the Python-list mailing list