- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HZK16应用示例
在C51中,HZK16汉字库的使用(mydowss Blog转载)
定义如下:unsigned char str[]=我在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位码)。使用如下换算公式得到“我”在HZK16文件中的地址,从该位置开始的顺序32字节为“我”的字模。??? ADD=【(区码-0xa1)×0x5e + (位码-0xa1)】×0x20按照上面的计算方法,“我”的字模地址:0x216E0 。他的C语言字模为:0x04,0x80,0x0E,0xA0,0x78,0x90,0x08,0x90,0x08,0x84,0xFF,0xFE,0x08,0x80,0x08,0x90,0x0A,0x90,0x0C,0x60,0x18,0x40,0x68,0xA0,0x09,0x20,0x0A,0x14,0x28,0x14,0x10,0x0C
???????? HZK16字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个。其中一级汉字有3755个,按声序排列,二级汉字有3008个,按偏旁部首排列。我们在一些应用场合根本用不到这么多汉字字模,所以在应用时就可以只提取部分字体作为己用。
HZK16字库里的16×16汉字一共需要256个点来显示,也就是说需要32个字节才能达到显示一个普通汉字的目的。
我们知道一个GB2312汉字是由两个字节编码的,范围为A1A1~FEFE。A1-A9为符号区,B0到F7为汉字区。每一个区有94个字符(注意:这只是编码的许可范围,不一定都有字型对应,比如符号区就有很多编码空白区域)。下面以汉字“我”为例,介绍如何在HZK16文件中找到它对应的32个字节的字模数据。
前面说到一个汉字占两个字节,这两个中前一个字节为该汉字的区号,后一个字节为该字的位号。其中,每个区记录94个汉字,位号为该字在该区中的位置。所以要找到“我”在hzk16库中的位置就必须得到它的区码和位码。(为了区别使用了区码和区号,其实是一个东西,别被我误导了)
区码:区号(汉字的第一个字节)-0xa0??? (因为汉字编码是从0xa0区开始的,所以文件最前面就是从0xa0区开始,要算出相对区码)
位码:位号(汉字的第二个字节)-0xa0
这样我们就可以得到汉字在HZK16中的绝对偏移位置:
offset=(94*(区码-1)+(位码-1))*32
注解:1、区码减1是因为数组是以0为开始而区号位号是以1为开始的
??????????? 2、(94*(区号-1)+位号-1)是一个汉字字模占用的字节数
?????????? 3、最后乘以32是因为汉字库文应从该位置起的32字节信息记录该字的字模信息(前面提到一个汉字要有32个字节显示)
有了偏移地址就可以从HZK16中读取汉字编码了,剩下的就是文件操作了,就不说了,要看代码(汉字)就是下面的:“hzk16汉字库的简单读写程序 ”,是一个最简单的c语言程序。
???????????????????????????????????????????????? hzk16汉字库的简单读写程序
hzk汉字点阵????????? int??? i,j,k;????? unsigned??? char??? incode[3]=我;??? //??? 要读出的汉字????? unsigned??? char??? qh,wh;????? unsigned??? long??? offset;????? //??? 占两个字节,??? 取其区位号????? qh??? =??? incode[0]??? -??? 0xa0;/ /获得区码?????????????? wh??? =??? incode[1]??? -??? 0xa0;?? / /获得位码????????????????? offset??? =??? (94*(qh-1)+(wh-1))*32;????????? /??? *得到偏移位置*??? /??????????? FILE??? *HZK;????? char??? mat[32];????? if((HZK=fopen(hzk16,??? rb))??? ==??? NULL)????? {????? printf(Cant??? Open??? hzk16\n);????? exit(0);????? }????? fseek(HZK,??? offset,??? SEEK_SET);????? fread(mat,??? 32,??? 1,??? HZK);
//显示
for(j=0;j16;
您可能关注的文档
最近下载
- 湖南高速铁路职业技术学院单招《英语》常考点试卷附答案详解【A卷】.docx VIP
- T100程序设计-双档.pptx VIP
- 模块8 港浃台地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
- 2025年9月最新版劳务用工合同范本(可规避风险).doc
- 模块7 西北地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
- 模块6 西南地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
- 汽车维修服务方案(完整版+104页).docx VIP
- 模块5 华南地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
- 模块4 华中地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
- 模块3 华东地区导游基础知识《地方导游基础知识》教学课件.pptx VIP
文档评论(0)