Python:如何增加ctypes指针实例

Python:如何增加ctypes指针实例,python,pointers,ctypes,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=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'
查看以了解有关使用指针的更多信息

更新:这似乎不是你需要的。然后,让我们尝试另一种方法:首先将指针强制转换为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')

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

回到这个问题后,我发现@MichałBentkowski的答案对我来说仍然不够,因为它没有修改原始指针

这是我当前的解决方案:

a = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
aPtr = ctypes.cast(ctypes.pointer(a), ctypes.POINTER(c_void_p))
aPtr.contents.value += ctypes.sizeof(a._type_)

print a.contents

这在C语言中并不总是那么热门;看到有人想把它应用到Python上,我有点害怕。这并不能真正回答我的问题。我真的想修改/增加
p
。如果
p
c\u void\u p
,我可以做
p.value+=1