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.
-- http://mail.python.org/mailman/listinfo/python-list