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