2010-08-18 72 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') 
相关问题