我有一个字符串缓冲区: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 个此类缓冲区,因此我希望使用单个拼接缓冲区。)
最佳答案
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')
关于python - Ctypes 偏移到缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3517159/