打印

求助建立字库索引

[复制链接]
2610|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
46621295|  楼主 | 2009-8-25 09:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
字库通过I2C存放在外部的EEPROM,希望在程序中调用字库的地方能直接读取EEPROM中相应的地址,如何建立一个索引呢?
比如“测试”存放在起始地址0x0000,每个汉字占用32个byte,即“测”的起始地址0x0000,“试”的起始地址0x0020。程序中调用子函数DisplayCHS(‘测试');,那么DisplayCHS(unsigned char Hanzi){//需将“测”字转换成0,“试”字转换成32,然后用字库起始地址加上转换的偏移结果就是对应汉字的存储地址}。我还在程序中定义了unsigned char HZindex[]={'测试'};,我想问题的核心就是如何用DisplayCHS的参数HanZi和定义的HZindex来计算出偏移量?

相关帖子

沙发
我是土匪| | 2009-8-25 12:28 | 只看该作者
听说过汉字机内码吗?这个是有成熟公式的。
举个简单例子:
offset = (94*(str[count1]-0xa1)+(str[count1 + 1]-0xa1))*32L;        //根据机内码计算偏移量
//32  指16*16汉字点阵,16*16/2 = 32;一个汉字2个字节。公式去网上baidu.不同字库偏移量不同。
str是存储汉字的字符串,offset 就是偏移量地址,然后在这个地址顺序读取32个长度。

使用特权

评论回复
板凳
xwj| | 2009-8-25 12:50 | 只看该作者
索引字库的话使用起来很方便,

字符数目少的话可以用诸葛匹配查找的方式,就是个循环判断,找到退出;
如果字符数目多,当然就应该排序后用二分法了;

至于2楼说的是全字库,这个可需要不少的空间来存放哦(对于单片机来说)

使用特权

评论回复
地板
john_light| | 2009-8-25 13:44 | 只看该作者
老徐花明嘀这种匹配荒法,是逐个匹配吧?

使用特权

评论回复
5
我是土匪| | 2009-8-25 13:48 | 只看该作者
全字库要255K(16点阵的)
显示的很少也可自己建立小字库

诸葛匹配,学习了!

使用特权

评论回复
6
wujianguo789| | 2012-6-15 23:32 | 只看该作者
7
qqwe13| | 2012-12-17 10:58 | 只看该作者
不知道LZ找到方法了没有,同问此问题
另外似乎是用字典索引配以二分法的办法似乎可行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

100

帖子

1

粉丝