在Python 3.x下将字符串传递给ctypes函数

时间:2011-12-17 04:54:31

标签: python python-3.x ctypes

from ctypes import *
msvcrt = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)

我正在阅读一本关于Ctypes和Python的书,但示例代码不起作用。

可能是因为这本书是为python 2编写的,而我是在Python 3上编写的?

printf只打印第一个字母。

2 个答案:

答案 0 :(得分:20)

C printf函数需要字节字符串。在Python 3中,所有字符串都是unicode,因此您必须编码为字节:

>>> msvcrt.printf("Testing: %s".encode('ascii'), message_string.encode('ascii'))
Testing: Hello world!
22

如果您有任何非ascii字符,请改为编码到相关的Windows代码页。

答案 1 :(得分:3)

bleh,使用“”.encode('ascii')很难看。你可以经常这样做:

TTF_OpenFont(b"assets/droid.ttf", 10)
             ^^

注意字符串的'b'类型。这也可以移植到python 2.7。