将字符串传递给Python 3.x下的ctypes函数
问题描述:
from ctypes import *
msvcrt = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)
我正在阅读一本关于Ctypes和Python的书,但示例代码不起作用。将字符串传递给Python 3.x下的ctypes函数
难道是因为这本书是为Python 2编写的,而我是在Python 3上?
printf只打印第一个字母。
答
C printf
函数需要字节字符串。在Python 3的所有字符串都是unicode的,所以你必须编码为字节:
>>> msvcrt.printf("Testing: %s".encode('ascii'), message_string.encode('ascii'))
Testing: Hello world!
22
如果您有任何非ASCII字符编码,然后到相关窗口代码页来代替。
答
bleh,使用“”.encode('ascii')是丑陋的。你经常可以这样做:
TTF_OpenFont(b"assets/droid.ttf", 10)
^^
注意'b'类型的字符串。这对python 2.7也是可移植的。
请提供更多信息 - 您收到的实际错误消息,您尝试过的其他选项正在工作或不工作。此外 - 更好,更具描述性的标题将为您提供更多意见。 – dtlussier 2011-12-17 05:47:08
也许吧。 Python 2的代码对我来说工作得很好。你尝试过吗? – 2011-12-17 08:21:24