4

我刚开始使用 BitString 和 ctypes,我有一个二进制文件的一部分存储在startdata一个BitArray类中。

> print(startdata)
0x0000000109f0000000010605ffff

现在,我必须将这些数据按原样传递给一个接受unsigned char *as 参数的 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
4

1 回答 1

3

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

然后,您可以使用以下命令将缓冲区传递给您的 C 函数byref

byref(buffer)
于 2015-04-01T14:19:53.123 回答