Pregunta Cómo obtener la dirección del puntero de una instancia de ctypes.c_char_p


Quiero extraer la dirección entera que una ctypes.c_char_p puntos de instancia a.

Por ejemplo, en

>>> import ctypes
>>> s = ctypes.c_char_p("hello")
>>> s
c_char_p(4333430692)

El valor que me gustaría obtener es 4333430692 - la dirección de la cadena hello\0 en memoria:

(lldb) x 4333430692
0x1024ae7a4: 68 65 6c 6c 6f 00 5f 70 00 00 00 00 05 00 00 00  hello._p........

He leído los documentos de ctypes, pero no parece haber ninguna manera de hacerlo. Lo más cercano es ctypes.addressof, pero eso solo me da la ubicación del puntero, por supuesto.

La razón por la que quiero esto es porque estoy llamando a algunas funciones de C que en realidad esperan que las direcciones sin procesar estén codificadas como enteros (cuyo tamaño es igual al ancho del puntero nativo).


5
2017-08-26 19:18


origen


Respuestas:


Podrías simplemente lanzarlo a c_void_p y obtener el valor:

>>> ctypes.cast(s, ctypes.c_void_p).value
4333430692

7
2017-08-26 19:23