ARDUINO U8G2 и русский текст

Linexer

✩✩✩✩✩✩✩
20 Сен 2021
11
0
Всем hello world! Имеется экран 128x32, работающий только на u8g2. Для вывода русского текста на всю возможную ширину строки имеется функция getUTF8Width, выдающая ширину строки в пикселях. Для этого нужно побуквенно скопировать из исходного str[] в buf[] и печатать, пока не дойдем до края.
Проблема: русская буква - 2 байта, копирование не срабатывает, getutf8width выдает 0 пикселей
Подскажите, есть ли вообще адекватный способ копирования русских букв?
 

Сотнег

★★★★★★★
15 Янв 2020
4,407
1,509
@Linexer,
она бы так не называлась, если бы не могла хотя бы 2 байта принимать в качестве аргумента.
 

Linexer

✩✩✩✩✩✩✩
20 Сен 2021
11
0
@Сотнег, проблема в том, что display.getUTF8Width("Ф") или display.getUTF8Width(buf) с заранее заданной строкой работает и выдает правильно. Моя проблема в том, что я не могу понять как скопировать русскую букву из str в buf побуквенно
 

Сотнег

★★★★★★★
15 Янв 2020
4,407
1,509
@Linexer,
вы ведь могли вывести и посмотреть, что там лежит в buf, когда все работает...

Когда первый символ больше 127, нужно брать два.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,415
978
58
Марий-Эл
Переписать класс Print и добить в знакогенератор русские буквы, и забыть про все заморочки.
Но за этот совет меня здесь быстро заплюют.
 

Linexer

✩✩✩✩✩✩✩
20 Сен 2021
11
0
@Сотнег, мысль про ASCII была, но не сразу понял, что делать. Пинок принят, прогресс пошёл(y)
 

Сотнег

★★★★★★★
15 Янв 2020
4,407
1,509
@Linexer,
я не понял, чего вы там придумали из ASCII.
Нужно было просто подавать в функцию не по 1, а по 2 байта, если первый байт больше 127.
 

Linexer

✩✩✩✩✩✩✩
20 Сен 2021
11
0
@Сотнег, текст может быть вперемешку как с русскими, так и с английскими а также цифры и знаки. Поэтому не всегда нужно по два байта. Пока не понял почему, но при тестах русских букв выдается по два отрицательных числа как код ascii, если знак входит в ascii - то число положительное и правильное, совпадает с таблицей. Поэтому сделано сравнение с нулем, и пока всё работает адекватно, всё печатается. Как то так...🤷‍♂️
 

Сотнег

★★★★★★★
15 Янв 2020
4,407
1,509
@Linexer,
один байт нужно брать, когда он меньше 127.

Но если вместо byte зачем-то использовать знаковый char, тогда конечно с нулём придётся сравнивать.

Или вы специально решили себе жизнь усложнить, явно прописав int8_t?
 
Изменено: