Ctypes抵消了缓冲区

时间:2010-08-18 22:13:20

标签: python ctypes

我有一个字符串缓冲区: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个这样的缓冲区,因此我希望使用单个拼接缓冲区。)

1 个答案:

答案 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')