Передача строк в функции ctypes в Python 3.x
from ctypes import *
msvcrt = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)
Я просматриваю книгу о Ctypes и Python, но код примера просто не работает.
Может быть, потому, что книга была написана для python 2, тогда как я на Python 3?
printf печатает только первую букву.
Ответы
Ответ 1
Функция C printf
ожидает байтовые строки. В Python 3 все строки являются unicode, поэтому вам придется кодировать в байты:
>>> msvcrt.printf("Testing: %s".encode('ascii'), message_string.encode('ascii'))
Testing: Hello world!
22
Если у вас есть символы не-ascii, тогда вместо этого кодируйте соответствующую кодовую страницу Windows.
Ответ 2
bleh, использование ".encode('ascii') является уродливым. Вы часто можете уйти от этого:
TTF_OpenFont(b"assets/droid.ttf", 10)
^^
Обратите внимание на тип 'b' для строки. Это также переносится на python 2.7.