from ctypes import *
msvcrt = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)
我正在阅读一本关于Ctypes和Python的书,但示例代码不起作用。
可能是因为这本书是为python 2编写的,而我是在Python 3上编写的?
printf只打印第一个字母。
答案 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。