3
我刚刚开始使用BitString和ctypes,并且我有一个二进制文件的一部分存储在startdata
,BitArray
类中。现在如何将BitString转换为ctypes字节数组?
> print(startdata)
0x0000000109f0000000010605ffff
,我要通过这个数据,是一个C函数,它接受一个unsigned char *
作为参数,所以我第一次尝试做这样的事情:
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
当我做到这一点,它说:'ValueError异常:缓冲区太小(786,而不是至少6288个字节)'。在我的例子中,'len(startdata)'是6288.你知道这是为什么吗?我正在使用'bytearray(startdata.bytes)'和['bytes'](https://pythonhosted.org/bitstring/constbitarray.html#bitstring.Bits.bytes)函数。 – slhck 2015-04-01 14:32:08
@slhck:正确的行应该是这样的:'buffer =(ctypes.c_uint8 * len(startdata.bytes))。from_buffer(bytearray(startdata.bytes))',这里给出'startdata'是一个实例'BitArray'。确保你得到了正确的对象的长度。 – Neitsa 2015-04-01 14:44:19
完美运作!也许如果你可以在你的答案中编辑这些部分,以便它们与'BitArray'实例一起工作? :) 谢谢你的帮助。 – slhck 2015-04-01 14:52:10