5.小汉字库的使用
需要注意是,在建立小汉字库的同时,最好还要记住其中的排列顺序,这样才能方便地通过索引数组来选择字模信息。静态库的内容可以通过test. txt来观察,而动态库的内容却不能直观地显示,如果忘了的话,我们编制以下的小工具来实现浏览功能:
现在我们假设已经知道了testl. hzk的内容为“青春工作室一九七年月”,我们将这些字标记以0-9,那么“一九九七年七月”可以用数组表达为{5667879},通过这个数组我们再从testl. hzk中读取字模再写出字来。具体实现过程描述如下:

当然,TextOut ()函数也可以再作修改。我们赋予索引数组一个通用的结束符,这样TextOut就可以减少一个参数num来标志汉字的个数。
C语言采用“\0”作为字符串中的结束符,但我们若也把它用作数组的结束符并不合适,因为我们有可能用到第0个汉字。当然,以(-1)作为结尾,问题就解决了。
在TextOut中加上判断语句就可以达到目的。
6.小汉字库的改进
前面建立的test. hzk的长度永远是32的倍数,但一旦我们为每个字模增加两个字节,TextOut ()函数的使用就方便得多。
读者是乐于用字符数组“一九九七年七月”来替换古板的{5667879-1}的,因为它的可读性大大增强,而且还免去了努力地记住小汉字库的排列顺序。
我们仍然采用动态建库方式,在写进字模之前,我们先将汉字的机内码(两个字节)写进去。在使用小汉字库的时候,先根据机内码进行判断再定位,再读取字模就可以写字了。
这样,字库的结构变成:
内码 | 字模 | 内码 | 字模
计算机是为我们服务的,它绝不会因为做的事情太多而大发牢骚,从而影响了工作的兴趣,这点读者应该明白,我们编出来的程序不应该要求用户记忆太多的东西(如前面的建库方式),甚至进行大量的计算——让计算机去干好了。
以下是改进后的建库程序:
程序生成的小汉字库名为test2. hzk(为了便于以后程序的调试,假设它的内容为“电脑汉字小爱好技术者库”)。
因为汉字的内码需要2个字节,如果构造一个WORD联合,将两个字节并在一块处理,这样的代码则更容易让人理解。
以下是如何使用它的例程:

7.将字库放进内存中去
硬盘的访问时间为ms级,内存的访问时间为ns级,内存的访问速度是硬盘的近1000倍。在大型程序中,当速度成为很突出的问题时,我们就必须考虑怎样加快字模的读取。既然小汉字库的体积很小,我们何不将它置于内存中去呢?
最好的方案是将这部分内存分成两部分:一部分用来存储内码,另一部分用来存储字模信息。这样就会加快运行速度。在以下的例程中,读取字库文件test2.hzk时,程序将内码置于hzcode数组中去,紧接着将字模信息置于hzp数组中去(它被中明为指向字符型指针的指针),当然,汉字的个数也该记录下来,以备后用。

本文曾经发表于《电脑爱好者》期刊杂志98年8期,版权CFan所有。