嵌入式C- UTF8到MARC8

时间:2018-11-18 13:08:30

标签: c embedded stm32

我正在使用STM32作为微处理器,我正在尝试访问一个包含LCD阿拉伯字体的数组。 我的问题是字符是按MARC8排序的,但是解析是使用UTF8进行的

示例

1_vwxyz

十六进制值是D8A8,而只能是C8。

任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

有两种可能的方法。

运行时之前的转换

使用(编写)外部程序将文本转换为目标编码。它应该输出#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;

这在速度和内存有限的嵌入式平台上是有利的,因为转换表和例程未存储在目标计算机上。

缺点是其他系统以电子方式(通过网络或存储卡)提供的文本在使用前仍必须进行某种转换。

运行时转换

您当然可以使用一个简单的转换函数,该函数接受一个unicode字符串,并使用像这样的映射表将其逐字符转换为其他编码:

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 } };