2010-08-18 98 views
2

我有一個字符串緩衝區:b = create_string_buffer(numb)其中numb是一個字節數。Ctypes偏移到緩衝區

在我的包裝,我需要拼接這個緩衝區。當調用期望一個POINTER(c_char)我可以做一個函數:myfunction(self, byref(b, offset))但在一個結構:

class mystruct(Structure): 
    _fields_ = [("buf", POINTER(c_char))] 

我無法做到這一點,得到一個參數類型的異常。所以我的問題是:如何將.buf分配給b的偏移量。直接分配的工作原理如此.buf = b,但這是不合適的。 (Python不容納孔對正在創建〜32000個此類緩衝液使用一個單一的剪接緩衝器每一秒,因此我的願望。)

回答

2

ctypes.cast

>>> import ctypes 
>>> b = ctypes.create_string_buffer(500) 
>>> b[:6] = 'foobar' 
>>> ctypes.cast(ctypes.byref(b, 4), ctypes.POINTER(ctypes.c_char)) 
<ctypes.LP_c_char object at 0x100756e60> 
>>> _.contents 
c_char('a')