Как я могу преобразовать BitString в массив байтов ctypes?

Я только начал с BitString и ctypes, и у меня есть часть двоичного файла, хранящегося в startdata, BitArray учебный класс.

> print(startdata)
0x0000000109f0000000010605ffff

Теперь я должен передать эти данные как есть функции C, которая принимает unsigned char * в качестве аргумента, поэтому я сначала пытаюсь сделать что-то вроде этого:

buf = (c_ubyte * len(startdata))()

чтобы наконец сделать это:

buf_ptr = cast(pointer(buf), POINTER(c_ubyte))

Это работает, но как мне назначить байтовые данные из startdata в этот массив / буфер, который я только что создал?

Это не работает:

> buf = (c_ubyte * len(startdata))(*startdata.bytes)
TypeError: an integer is required

4

Решение

Вот возможное решение (обратите внимание, что я использую Python 3):

import ctypes

def bitarray_to_ctypes_byte_buffer(data):
"""Convert a BitArray instance to a ctypes array instance"""ba = bytearray(data.bytes)
ba_len = len(ba)
buffer = (ctypes.c_uint8 * ba_len).from_buffer(ba)
return buffer

(Примечание: то же самое относится к преобразованию bytes экземпляр к байтовому массиву ctypes, просто удалите .bytes в data.bytes).

Затем вы можете передать буфер вашей функции C, используя byref:

byref(buffer)
3

Другие решения