|
MDK 5编译环境下,汉字,英文混合显示的问题的讨论结果
[复制链接]
前天在这个坛子里面发了个帖子,讨论了下MDK5里面要编写一个函数在TFT屏幕上显示一种比较复杂的字符串的方法
比如
LCD_SHOWSTRING("aa我我");要显示这个字符串,在读取FLASH里面字库点阵的时候,出现混乱,因为我下载的字库只包括GB2312里面的中文,不包括英文,标点,越南文什么的(也不好找这种,当然也没必要浪费空间)。出现混乱的原因是在MDK编译环境下面,这个字符串“aa我我”的编译结果是按照,a按照ask码对应过来(一个char),我我是按照GB2312里面的索引对应过来(两个char)
我是通过编写了一个小函数来验证了这个问题的。在图片中我们可以看到字符串“aa我我”的实际值是 0x61 0x61 0xCE 0xD2 0xCE 0xD2
也就是说,在这个环境下字符串中a的值不是GB2312里面的 0xA3 0XE1,而是0x61(这是ask码对应的值)也不是0x00 0x61
因此,结论就是
在MDK环境下,要编写一个显示包含中文和英文或者标点符号的函数,只能通过判断字符串值来确定是ask码还是汉字,因为ask码的值是肯定小于0x80的。
函数的大概逻辑就出来了
显示字符串的函数
{
do
{
1,判断指针指向的这个字符串的值得大小,
2,如果大于0x80,肯定是汉字了,就按两个char确定一个汉字的逻辑来读取flash里面的点阵数据 ,即要P+2
3,如果小于0x80,肯定是ask码里面的英文,标点什么的了,所以就按一个char确定点阵的位置 这是只需P++就可以了
}
while(*p!=0);
}
然后接着前一个帖子的问题,我烧写了一个GB2312汉字字库以后,在flash的后面接着又烧写了一个ASK码的字库,所以在软件里面判断一下这个点阵起始位置就可以了。
好了,感觉说的比较乱,如果下次有人同样遇到这个问题,希望可以百度到我的帖子。
|
-
123.jpg
(56.91 KB, 下载次数: 0)
MDK环境下的字符串实际值
-
124.jpg
(19.94 KB, 下载次数: 0)
字母a在GB2312总的索引值
赞赏
-
1
查看全部赞赏
-
|