Python:如何增加 ctypes POINTER 实例

标签 python pointers ctypes

假设 p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))

因此,我们有 p.contents.value == "f"

如何直接访问和操作(例如递增)指针?例如。像 (p + 1).contents.value == "o".

最佳答案

你必须使用索引:

>>> p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
>>> p[0]
'f'
>>> p[1]
'o'
>>> p[3]
'\x00'

看看ctypes documentation了解更多关于使用指针的信息。

更新:看来这不是您所需要的。那么,让我们尝试另一种方法:首先将指针转换为 void,增加它,然后将其转换回 LP_c_char:

In [93]: p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))

In [94]: void_p = ctypes.cast(p, ctypes.c_voidp).value+1

In [95]: p = ctypes.cast(void_p, ctypes.POINTER(ctypes.c_char))

In [96]: p.contents
Out[96]: c_char('o')

也许它并不优雅,但它确实有效。

关于Python:如何增加 ctypes POINTER 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6692185/

相关文章:

python - py2neo ogm incoming related is None,为什么?

python - 符号 "#!"在 Python 中是什么意思?

C++ 创建一个静态类来存储指针

Python 无法使用 Python 的 ctypes 读取包含 char 数组的结构

python - 从文件python解析结构化数据

python - 读取保存在文本文件中的源页面并提取文本

c - 使用指针对数组进行排序,不使用任何索引变量

C 指针和队列的指针

python - 在 python 中使用 ctypes 与仅包含函数指针的 c 结构体进行交互

python - python 中的 ctypes 有多快?