如何将 BitString 转换为 ctypes 字节数组?

How can I convert a BitString to a ctypes Byte Array?

我刚刚开始使用 BitString 和 ctypes,并且我将二进制文件的一部分存储在 startdataBitArray class.

> print(startdata)
0x0000000109f0000000010605ffff

现在,我必须按原样将此数据传递给以 unsigned char * 作为参数的 C 函数,所以我首先尝试做这样的事情:

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

这是一个可能的解决方案(注意我使用的是 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 字节数组,只需删除 data.bytes 中的 .bytes)。

然后您可以使用 byref:

将缓冲区传递给您的 C 函数
byref(buffer)