现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能; 一个提供汉字显示功能的空调的LCD上不需要显示一条"短消息",诸如此类。但是一部手机、小灵通则通常需要包括较完整的汉字库。

如果包括的汉字库较完整

如果包括的汉字库较完整,那么,由内码计算出汉字字模在库中的偏移是十分简单的:汉字库是按照区位的顺序排列的,前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:94*(区号-1)+位号-1。 减1是因为数组是以0为开始而区号位号是以1为开始的。只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1)+位号-  1)*一个汉字字模占用字节数,以16*16点阵字库为例,计算公式则为: (94*(区号-1)+(位号-1))*32。汉字库中从该位置起的32字节信息记录了该字的字模信息。

对于包含较完整汉字库的系统而言, 我们可以以上述规则计算字模的位置。

如果仅仅是提供少量汉字

但是如果仅仅是提供少量汉字呢?譬如几十至几百个?最好的做法是:

定义宏:

                  # define EX_FONT_CHAR(value) # define EX_FONT_UNICODE_VAL(value) (value), # define EX_FONT_ANSI_VAL(value) (value), 

定义结构体:

                  typedef struct _wide_unicode_font16x16 { WORD value; /* 内码 */ BYTE data[32]; /* 字模点阵 */ }Unicode; #define CHINESE_CHAR_NUM … /* 汉字数量 */ 

字模的存储用数组:

                  Unicode chinese[CHINESE_CHAR_NUM] = { { EX_FONT_CHAR("业") EX_FONT_UNICODE_VAL(0x4e1a) {0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x04, 0x44, 0x44, 0x46, 0x24, 0x4c, 0x24, 0x48, 0x14, 0x50, 0x1c, 0x50, 0x14, 0x60, 0x04, 0x40, 0x04, 0x40, 0x04, 0x44, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00} }, { EX_FONT_CHAR("中") EX_FONT_UNICODE_VAL(0x4e2d) {0x01, 0x00, 0x01, 0x00, 0x21, 0x08, 0x3f, 0xfc, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x3f, 0xf8, 0x21, 0x08, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00} }, { EX_FONT_CHAR("云") EX_FONT_UNICODE_VAL(0x4e91) {0x00, 0x00, 0x00, 0x30, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xfe, 0x03, 0x00, 0x07, 0x00, 0x06, 0x40, 0x0c, 0x20, 0x18, 0x10, 0x31, 0xf8, 0x7f, 0x0c, 0x20, 0x08, 0x00, 0x00} }, { EX_FONT_CHAR("件") EX_FONT_UNICODE_VAL(0x4ef6) {0x10, 0x40, 0x1a, 0x40, 0x13, 0x40, 0x32, 0x40, 0x23, 0xfc, 0x64, 0x40, 0xa4, 0x40, 0x28, 0x40, 0x2f, 0xfe, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40} } } 

要显示特定汉字的时候,只需要从数组中查找内码与要求汉字内码相同的即可获得字模。如果前面的汉字在数组中以内码大小顺序排列,那么可以以二分查找法更高效的查找到汉字的字模。 这是一种很有效的组织小汉字库的方法,它可以保证程序有很好的结构。

嵌入式系统中对汉字的处理相关推荐

  1. 嵌入式系统中时间的应用以及rtc的验证过程

    在嵌入式系统中时间分为3种,分别为当前时间,系统时间,硬件时间,三种之间有一定的关联关系,如果开发板没有电池,用于保持开发板的时钟,那么当开发板断电后,时钟恢复为默认时间,一般为1970年1月1日,0 ...

  2. 嵌入式系统中进程间通信的监视方法

    概述 复杂的嵌入式系统中,常常同时运行着相当多的进程.这些进程之间频繁的进行着大量的通信动作.进程的运行状态与这些不断发生的通信有着直接和紧密的联系.通过对进程间通信的监视,开发人员可以掌控系统内部运 ...

  3. python好还是c+-嵌入式系统中,Python与C/C++哪方更为适用?

    [51CTO.com快译]长久以来,C/C++一直编译着嵌入式系统编程领域,但二者亦拥有自己的缺陷.相比之下,Python则成为嵌入式系统中的另一大***语言选项.在今天的文章中,我们将共同探讨双方的 ...

  4. 【原创】QT在嵌入式系统中显示中文的方法

    [原创]QT在嵌入式系统中显示中文的方法 此篇文章主要借鉴:http://zzqh007.blog.163.com/blog/static/44434847201011312168296/ 移植QT4 ...

  5. python嵌入式系统开发_Python在开发实时嵌入式系统中的作用

    原标题:Python在开发实时嵌入式系统中的作用 在过去的几年里,Python已经成为一种热门的程序语言.以著名的Monty Python喜剧小组命名,该语言是面向对象和解释.该属性导致Python在 ...

  6. 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】

    看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...

  7. 嵌入式系统中看门狗概述。。。

    一直以来对于嵌入式中的watch dog(看门狗)都比较陌生,一直都不知道它到底是做什么的,单从名字上看也不知其所以然,然后就在网上找到了一篇blog,就是再说看门狗的作用和概述,原文如下: 1.概述 ...

  8. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

  9. 用crontab、crond在嵌入式系统中添加定时任务

    在嵌入式系统中,定时任务通过crond和cronttab两个系统命令来联合执行. 其中crond是定时任务的守护进程,系统开始时是没有开启的.crontab主要作用是管理用户的crontab file ...

最新文章

  1. 揭秘星际2人工智能AlphaStar:DeepMind科学家回应一切
  2. hadoop的yarn与node中的yarn冲突问题
  3. php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园
  4. java: 程序包org.springframework.boot不存在
  5. 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!
  6. C++ 变量初始化规则
  7. c语言定义一个strcmp函数,定义一个strcmp函数实现两个字符串比较,函数原型为int strcmp(char * p1,...
  8. 常用邮箱SMTP/POP3地址及端口
  9. ACM程序设计竞赛开幕式致辞
  10. Python鼠标拖动曲线(matplotlib)
  11. 在线IDE的原理及设计思路 以Java为例
  12. STM32 之十二 FLASH 使用详解 及 LL 库 FLASH 驱动实现
  13. excel取消隐藏_excel批量取消工作表隐藏,困绕我们N年的问题终于有了答案!
  14. 图模型在欺诈检测应用一点看法
  15. 逐行解析linux kernel NIC驱动
  16. 2021-07-28-飞桨课程笔记-关于数据获取途径与处理方面的技巧
  17. SEAndroid安全机制中的文件安全上下文关联分析
  18. 强烈推荐几个超厉害的公众号!
  19. DMPQ2Iracac红光铱(Ir)配合物|Ir(dfbpy)2(bpy)+PF6-|Ir(dfbpy)2(pyq)+PF6-|Ir(dfbpy)2(quqo)+PF6-科研试剂
  20. 【知识产权基础之专利权】第四章 专利申请文件

热门文章

  1. 【Android 应用开发】 自定义 圆形进度条 组件
  2. 万众期待的kintone开发账号免费开放申请啦!
  3. [工具向]__androidstudio签名打包apk及配置自动签名
  4. 技术分享-bounds的深入认识
  5. VS2010打不开创建的项目的解决方法
  6. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
  7. 开始学习python的感受
  8. Magento2插件
  9. [20170419]bbed探究数据块.txt
  10. js仿QQ中对联系人向左滑动、滑出删除按钮的操作