将字符串传递给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只打印第一个字母。

+4

请提供更多信息 - 您收到的实际错误消息,您尝试过的其他选项正在工作或不工作。此外 - 更好,更具描述性的标题将为您提供更多意见。 – dtlussier 2011-12-17 05:47:08

+0

也许吧。 Python 2的代码对我来说工作得很好。你尝试过吗? – 2011-12-17 08:21:24

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也是可移植的。