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

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

本文关键字:ctypes 字节 字节数 数组 转换 BitString      更新时间:2023-10-16

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

> 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)