假设 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/