Я пытаюсь взаимодействовать с C в Python, и у меня есть следующий прототип функции:
int testout(unsigned char *test, int *size)
Размер беззнакового символа определяется параметром size.Поэтому мне нужен способ динамического изменения размера буфера в Python, чтобы он соответствовал размеру, возвращенному при вызове функции.Мне было очень трудно это понять.
Из руководства Python ctypes :
"Это хорошо, но как можно получить доступ к дополнительным элементам, содержащимся в этом массиве?о 4 элементах мы получаем ошибки при доступе к другим элементам:
>>> short_array[:]
[0, 0, 0, 0]
>>> short_array[7]
Traceback (most recent call last):
...
IndexError: invalid index
>>>
Другой способ использования типов данных переменного размера с ctypes - это использование динамической природы Python и (пере) определение типа данных послетребуемый размер уже известен, в каждом конкретном случае. "
Отлично!Я получаю IndexError: неверный индекс, как показано в примере.И они решили не показывать, как это сделать правильно!:)
Кто-нибудь знает, как правильно изменить размер ctype?
Вот мой пример кода, который работает, за исключением изменения размера:
from ctypes import *
lib = "test.so"
dll = cdll.LoadLibrary(lib)
print "Testing pointer output"
dll.testout.argtypes = [POINTER(c_ubyte), POINTER(c_int)]
sizeout = c_int(0)
mem = (c_ubyte * 20)()
dll.testout(mem, byref(sizeout))
print "Sizeout = " + str(sizeout.value)
for i in range(0,sizeout.value):
print "Item " + str(i) + " = " + str(mem[i])