Поскольку вы говорите «или что-то еще» в заголовке Q - если вы решите использовать ctypes , вы можете представить void*
с c_void_p
(один из основных типов ctypes * )типы данных и функции доступа, такие как free
и memcpy
, из библиотеки времени выполнения C (при условии, что последняя доступна в виде динамической библиотеки DLL / .so, но в наши дни это довольно широко распространено).изменяемый буфер символов, в который вы можете memcpy
данные, используйте create_string_buffer .
Конечно, вы можете альтернативно использовать Python C API - PyByteArray_FromStringAndSize в этом случае вы будете использовать для копирования байтового массива ваши void*
и длину (и, конечно, вы будете вызывать free
напрямую, когда это уместно, так как в любом случае это просто C-код).
Другой возможностью для рассмотрения является Cython , Python-подобный язык, разработанный для написания расширений Python и такой, что компилятор Cython может генерировать компилируемый код C из исходников Cython - в Cython, your struct
будет выглядеть следующим образом:
cdef struct data:
void* hdr
void* data
unsigned int* len
при условии, что вы не хотите объявлять header
(т. е. для вас здесь важны только data
и len
) -- size_t
, я полагаю, в настоящее время не является частью Cython (я могу ошибаться, они продолжают добавлять вещи ;-), но unsigned int
, вероятно, могут это сделать.
Извините, это было слишкомдавно я использовал SWIG всерьез (что со всеми этими отличными альтернативами) - я бы пропустил вопрос Q, если бы не заголовок "или что-то еще" в заголовке; -).