質問
私は、ctypesの配列のサイズを変更したいと思います。あなたが見ることができるようにそれができたように、ctypes.resizeは動作しません。私は、配列のサイズを変更する関数を書くことができますが、私はこれまで、いくつかの他のソリューションを知りたいと思いました。たぶん私はいくつかのctypesトリックを欠けているか、多分私は単に間違ってサイズを変更使用します。名前c_long_Array_0が、これはサイズ変更では動作しないことを教えているようだ。
>>> 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>
>>> sizeof(c_int * 0)
0
>>> sizeof(c_int * 1)
4
編集:たぶんのようなもので行くます:
>>> 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
>>>
しかし、それはタイプの代わりに、サイズを渡し醜いです。それは、その目的のために働き、それはそれだ。
解決
from ctypes import *
list = (c_int*1)()
def customresize(array, new_size):
resize(array, sizeof(array._type_)*new_size)
return (array._type_*new_size).from_address(addressof(array))
list[0] = 123
list = customresize(list, 5)
>>> list[0]
123
>>> list[4]
0
所属していません StackOverflow