嵌入式系统中对汉字的处理
? ? ?現在要解決的問題是,嵌入式系統中經常要使用的并非是完整的漢字庫,往往只是需要提供數量有限的漢字供必要的顯示功能。例如,一個微波爐的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}?}?}?要顯示特定漢字的時候,只需要從數組中查找內碼與要求漢字內碼相同的即可獲得字模。如果前面的漢字在數組中以內碼大小順序排列,那么可以以二分查找法更高效的查找到漢字的字模。?這是一種很有效的組織小漢字庫的方法,它可以保證程序有很好的結構。
總結
以上是生活随笔為你收集整理的嵌入式系统中对汉字的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式系统中系统时间显示
- 下一篇: 嵌入式系统编程软件架构主要包括哪些知识?