Встроенный C-UTF8 в MARC8 - PullRequest
       12

Встроенный C-UTF8 в MARC8

0 голосов
/ 18 ноября 2018

Я использую STM32 в качестве своего микропроцессора, я пытаюсь получить доступ к массиву, содержащему мой арабский шрифт для LCDПример

   unsigned char * C = "ب";

Значения HEX - это D8A8, хотя это должен быть только C8.

Любое решение?

1 Ответ

0 голосов
/ 18 ноября 2018

Существует два возможных подхода.

Преобразование перед выполнением

Использование (запись) внешней программы для преобразования текстов в целевую кодировку.Он должен вывести список #define строк или определение enum и массив байтов в синтаксисе C, который можно использовать как заголовок в #include.Например,

#define SOME_TEXT "\xE2\x96\x94\x85\x40\xA3\x85\xA7\xA3" /* this is actually EBCDIC */

, затем используйте их в программе

const char *sometext = SOME_TEXT;

Это выгодно на встроенной платформе с ограниченной скоростью и памятью, поскольку таблицы преобразования и подпрограммы не хранятся нацель.

Недостатком является то, что текст, предоставленный другими системами в электронном виде (по сети или на карте памяти), все же должен каким-то образом преобразовываться перед использованием.

Преобразование во время выполнения

Конечно, вы можете использовать простую функцию преобразования, которая принимает строку в юникоде и преобразует ее символ за символом в другую кодировку, используя таблицу сопоставления, например

struct ucs_to_marc8 {
    unsigned char code1, code2;
    unsigned char marc8;
};
const struct ucs_to_marc8 ucs_to_marc8_table[] = {
    { 0xD8, 0xA7, 0xC7 }, // aleph
    { 0xD8, 0xA8, 0xC8 }, // beh
    /* etc */
    { 0, 0, 0 } };
.
...