python - Ctypes 偏移到缓冲区中

标签 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 个此类缓冲区,因此我希望使用单个拼接缓冲区。)

最佳答案

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/

相关文章:

python - Jinja2中的多级模板继承?

python - 整个数据包长度 Scapy

python - 如何通过检查 python 列表是否与给定模式匹配来对列表进行排序?

python - 使用 Flask 和应用程序引擎的 Multi-Tenancy 应用程序

python - 检查 pandas 条件行选择中数据帧的一部分的长度

Python for Windows 在调用 MinGW-w64 编译库的函数时挂起

python - 如何捕获 ctypes 中抛出的异常?

Python 使用 ctypes 传递 char * 数组并填充结果

python - 从 Python 调用 C 数学函数的高效解决方案

python - 错误的 ctypes 分配