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

时间:2015-04-01 13:29:58

标签: python c++ ctypes bitstring

我刚刚开始使用BitString和ctypes,我将部分二进制文件存储在startdataBitArray类中。

> 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

1 个答案:

答案 0 :(得分: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字节数组,只需删除.bytes中的data.bytes

然后,您可以使用byref

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