我刚刚开始使用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
答案 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
:
byref(buffer)