我正在使用STM32作为微处理器,我正在尝试访问一个包含LCD阿拉伯字体的数组。 我的问题是字符是按MARC8排序的,但是解析是使用UTF8进行的
示例
1_vwxyz
十六进制值是D8A8,而只能是C8。
任何解决方案吗?
答案 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 } };