Изменение типа символа с помощью wchar_t используется не так, как L - PullRequest
0 голосов
/ 24 сентября 2018

В своем коде я попытался создать массив из 4-х кусочных символов, где каждый символ содержит букву кириллицы.

  wchar_t OUT_STRING[4] = { L'т',L'л',L'о',L'р' };

Все в порядке с этим, и я ожидал вывода.Это всего лишь тест, в действительности мне нужно преобразовать элемент из строки в тот же тип, что и в OUT_STRING;Я пытался использовать что-то вроде этого:

 wchar_t OUT_STRING[4] = { (wchar_t)'т',L'л',L'о',L'р' };

Но это не сработало, и в выводе у меня есть прямоугольник.

1 Ответ

0 голосов
/ 24 сентября 2018

I думаю вы хотите передать строку, используя std :: string в кодировке UTF-8, и обрабатывать ее по одному символу за раз, каждый раз преобразуя один символ в строку широких символов длины1, чтобы вы могли передать его TTF_SizeUNICODE, а TTF_RenderUNICODE_Blended.

. Я продемонстрирую соответствующий код преобразования строки.

Вот функция test, которая ожидает нулевое значение.завершенная строка широких символов, содержащая только один символ.Тело main показывает, как преобразовать строку UTF-8 в UTF-16 (используя codecvt_utf8_utf16) и как преобразовать один символ в строку (используя std::wstring(1, ch))

#include <string>
#include <codecvt> 
#include <iostream>

void test(const wchar_t* str) {
    std::cout << "Number of characters in string: " << wcslen(str) << std::endl;

    for (const wchar_t* ch = str; *ch; ++ch) {
        std::cout << ((int)*ch) << std::endl;
    }
}

int main() {
    std::string input = u8"тлор";
    for (wchar_t ch : std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>().from_bytes(input)) {
        std::wstring string_with_just_one_character(1, ch);

        test(string_with_just_one_character.c_str());
    }
    return 0;
}
...