2011-12-12 15 views
8

Soy bastante nuevo para python y ctypes. Estoy tratando de lograr una tarea aparentemente fácil pero estoy obteniendo resultados inesperados. Estoy tratando de pasar una cadena a una función c, así que estoy usando el tipo c_char_p pero me está dando un mensaje de error. Simplemente, esto es lo que está sucediendo:utilizando métodos ctypes en python da error inesperado

>>>from ctypes import * 
>>>c_char_p("hello world") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: string or integer address expected instead of str instance 

¿Qué está pasando aquí?

Respuesta

8

En Python 3.x, el "text literal" es realmente un objeto unicode. Desea utilizar el literal de cadena de bytes como b"byte-string literal"

>>> from ctypes import * 
>>> c_char_p('hello world') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: string or integer address expected instead of str instance 
>>> c_char_p(b'hello world') 
c_char_p(b'hello world') 
>>> 
+0

Gracias esto ayuda mucho. Resulta que estaba buscando en la documentación de Python 2.7 y es por eso que estaba tan confundido. –