Question

Je voudrais redimensionner un tableau de ctypes. Comme vous pouvez le voir, ctypes.resize ne fonctionne pas comme il le pouvait. Je peux écrire une fonction pour redimensionner un tableau, mais je voulais savoir d'autres solutions à cela. Peut-être que je manque un truc de ctypes ou peut-être que je simplement utilisé redimensionner mal. Le nom c_long_Array_0 semble me dire que cela ne fonctionne pas avec Redimensionner.

>>> 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

Edit: Peut-être aller avec quelque chose comme:

>>> 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
>>> 

Mais c'est laid passage du type au lieu de la taille. Il travaille pour son but et c'est tout.

Était-ce utile?

La solution

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top