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只打印第一個字母。
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