2011-12-12 6 views
8

私はPythonとctypesにはかなり新しいです。私は一見簡単な仕事を達成しようとしていますが、予期しない結果を得ています。私は文字列をc関数に渡そうとしているので、c_char_p型を使用していますが、エラーメッセージが表示されます。簡単に言うと、これは起こります:Pythonのctypesメソッドを使用すると予期しないエラーが発生する

>>>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 

ここでは何が起こっていますか?

答えて

8

Python 3.xでは、"text literal"は実際にはユニコードオブジェクトです。 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

このようなバイト文字列リテラルを使用したいと思います。私は非常に混乱していたので、私はPython 2.7のドキュメントを見ていました。 –

関連する問題