本文介绍了Python:如何增加ctypes POINTER实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
.
因此,我们有p.contents.value == "f"
.
如何直接访问和操纵(例如递增)指针?例如.就像(p + 1).contents.value == "o"
.
How can I directly access and manipulate (e.g. increment) the pointer? E.g. like (p + 1).contents.value == "o"
.
推荐答案
您必须使用索引:
>>> p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
>>> p[0]
'f'
>>> p[1]
'o'
>>> p[3]
'\x00'
看看ctypes文档了解有关使用指针的更多信息.
Have a look at ctypes documentation to find out more about using pointers.
更新:看来这不是您所需要的.然后,让我们尝试另一种方法:首先将指针转换为void,将其递增,然后将其转换回LP_c_char:
UPDATE: It seems that it's not what you need. Let's, then, try another approach: first cast the pointer to void, increment it and then cast it back to 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')
也许它并不优雅,但可以.
Maybe it's not elegant but it works.
这篇关于Python:如何增加ctypes POINTER实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!