我有一个字符串缓冲区:b = create_string_buffer(numb)
其中numb
是一个字节数。
在我的包装器中,我需要拼接这个缓冲区。在调用期望POINTER(c_char)
的函数时,我可以执行:myfunction(self, byref(b, offset))
但在结构中:
class mystruct(Structure):
_fields_ = [("buf", POINTER(c_char))]
我无法做到这一点,得到一个参数类型异常。所以我的问题是:如何将.buf
指定为b的偏移量。直接分配工作.buf = b
,但这不合适。 (Python不能很好地防止每秒创建大约32,000个这样的缓冲区,因此我希望使用单个拼接缓冲区。)
答案 0 :(得分: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')