根据对汉字使用频率的研究,可把汉字分成高频字(约100 个),常用字(约3000 个),次常用字(约4000 个),罕见字(约8000 个)和死字(约45000 个),即正常使用的汉字达15000 个。我国1981 年公布了《通讯用汉字字符集(基本集)及其交换码标准》GB2312-80 方案,把高频字、常用字、和次常用字集合成汉字基本字符集(共6763 个),在该集中按汉字使用的频度,又将其分为一级汉字3755 个(按拼音排序)、二级汉字3008 个(按部首排序),再加上西文字母、数字、图形符号等700 个
2.6.1 区位码内码
区位码:国家标准的汉字字符集(GB2312—80)在汉字操作系统中是以汉字库的形式提供的。汉字库结构作了统一规定,即将字库分成94 个区,每个区有94 个汉字(以位作区别)。每一个汉字在汉字库中有确定的区和位编号(用两个字节),这就是所谓的区位码(区位码的第一个字节表示区号,第二个字节表示位号。
内码:ANSI码是单一字节(8位二进制数)的编码集,最多只能表示256个字符,不能表示众多的汉字字符,使用双字节来表示汉字字符,以能够处理大数量的汉字字符;
2.6.2内码到区位码的转换
若汉字内码为十六进制数h2h1l2l1,则区号qh 相位号wh 分别为:
qh= h2h1-0xa0;
wh= l2l1-0xa0;
若用十进制表示内码为dld2,则
qh=dl-l60;
wh=d2-160;
即区位码qw 为:
qw=100*(d1-160)十(d2-160);
2.6.3 显示
知道了区位码,就可知道该汉字在字库中的地址,每个汉字在字库中是以点阵字模形式存储的,如一般采用16×16点阵形式,每个点用一个二进位表示,存1 的点,当显示时,可以在屏上显示一个亮点,存0 的点,则在屏上不显示,这样把存某字的16×16 点阵信息直接用来在显示器上按上述原则显示,则将出现对应的汉字。
因而该汉字在汉字库中离起点的偏移位置(以字节为单位),可计算为:
offset=(94*(qh-1)+(wh-1))* 32;
以16*16点阵字库为例,通常的方法是:将文件工作指针移到需要的汉字字模处、将汉字库文件读入一2*16数组再用for循环一位位地显示。