我对自由拼音中KEYPH数据结构的理解

本文介绍了通过研究开源项目自由拼音(freepy)来深入了解输入法设计的过程,并详细解释了一个用于存储和检索拼音编码与对应词组的数据结构KEYPH。此外,作者还分享了自己在研读过程中的心得和体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 关于输入法的资料真是少的可怜,除了微软的MSDN和DDK,几乎没有什么可以看的资料了。好在还有那些无私奉献的大师们开放了他们的代码,这对一个研究输入法的人来说是极其宝贵的资源。绝大多数开发输入法的人都参考了自由拼音(freepy),本人也不例外,在此对开放源代码的李振春老师表示感谢,极大的推动了国内输入法的改进!
    由于本人原来对VC++接触较少,真正的研究还是从研读freepy时开始的,所以读这个程序还是有点吃力。但是工夫不负有心人,经过几个星期以来断断续续的研读,其中大部分内容都基本了解。
    我开始的时候找不到资料,同时又看到很多人在做输入法,感叹为什么没有人系统的介绍一下输入法的设计原理。难道真的是不值得介绍吗?真的是很简单吗?到现在看来,虽然不是完全,但确实是有点。
    在读的过程中有一个问题困扰我多日,今天终于搞懂了,发帖庆祝,同时也希望对有共同爱好并且遇到相同困难的哥们有所帮助。
 
typedef struct _KEYPH {
 SHORT wLen;
 BYTE abKey[MAX_PHRASE_LEN+1];
 HZPH __based(lpMapFileBase) *lpHZPH;
 struct _KEYPH __based(lpMapFileBase) *lpNext;
} KEYPH, FAR *LPKEYPH;
 
(1)wLen是词组的长度。
(2)abKey[MAX_PHRASE_LEN+1]是用来记录词组中各个汉字的拼音的key的。[key是拼音在LPPINYIN中的定位,即拼音所处的序列号,如:a 为1 an 为2等]
因为key的值会超过255的。所以一个字节不够保存了,需要9位二进制来记录。那么abkey[i]记录了第i个汉字对应拼音的后8位的值,abkey[0]中的8位分别对应着abkey[i](1<=i<=8)最高位,加上abkey[i]共9位二进制来记录了第i个汉字对应拼音的key。
(3)lpHZPH是记录着一个词组链表,该链表中包含了对应该拼音编码的所有词组。
(4)lpKEYPH指向下一个KEYPH,组成一个链表。
 
    以上是本人对KEYPH的理解,希望大家指正!
原文见http://danglx.blog.163.com/blog/static/3996118220051036044685/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值