p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
とする。Python:ctypes POINTERインスタンスをインクリメントする方法
したがって、p.contents.value == "f"
があります。
ポインタに直接アクセスしたり操作したりするにはどうすればよいですか?例えば。 (p + 1).contents.value == "o"
のように。あなたは、インデックスを使用する必要が
p = ctypes.cast("foo", ctypes.POINTER(ctypes.c_char))
とする。Python:ctypes POINTERインスタンスをインクリメントする方法
したがって、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を見てください。
更新日:必要なものではないようです。さんは、その後、別のアプローチを試してみましょう:まず、無効とそれをインクリメントし、その後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')
を多分それはエレガントではないのですが、それは動作します。
これは本当に私の質問に答えるものではありません。私は本当に 'p'を変更/増やしたいです。 'p'が' c_void_p'ならば、 'p.value + = 1'を実行できます。 – Albert
@Albert、私は自分の答えを更新しました。 –
これに戻り、@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にそれを適用したいのを見て私は少し怖いです。 –