вы можете использовать create_string_buffer
buffer = ctypes.create_string_buffer(b"",1000 * 4)
для создания 0-заполненного буфера из 1000 целых чисел 4-размера. Этот буфер имеет тип ctypes.c_char_Array_4000
, который может быть передан как указатель для записи в импортируемые функции.
Эта функция создает изменяемый символьный буфер. Возвращаемый объект является массивом ctypes c_char.
init_or_size должен быть целым числом, которое определяет размер массива, или байтовым объектом, который будет использоваться для инициализации элементов массива.
Если в качестве первого аргумента указан объект байтов, буфер становится на один элемент больше своей длины, так что последний элемент в массиве является символом завершения NUL. В качестве второго аргумента может быть передано целое число, которое позволяет указать размер массива, если длина байтов не должна использоваться.
Теперь вызовите вашу импортированную функцию и получите объект python bytes
, только что написанный с помощью:
python_bytes_array = ctypes.string_at(buffer)
и используйте struct
, чтобы получить целочисленные значения. Не нужно указывать порядковый номер. I
составляет 4 байта. Это будет работать, если вызываемые функции используют 4-байтовые целые числа:
import struct
integer_tuple = struct.unpack("1000I",python_bytes_array)