基于点阵字库的汉字显示 分类: 中文信息处理 2015-01-15 14:08 359人阅读 评论(0) 收藏
2015-01-15 14:08
323 查看
使用字库HZK16,该字库是符合GB2312标准的16×16点阵字库,存储每个汉字需要32字节(16*16/8=32字节)。HZK16中的一个汉字的偏移地址计算公式(假设机内码为ABCD):offset=[(AB-0XA1)*94+(CD-0XA1)]*32
证明:
GB2312编码对所收录字符进行了分区处理,共94区,每区含有94位,这种表示方式称为区位码。
如“啊"位于16区的01位,所以它的区位码就是1601(区位码用十进制表示)。
由区位码得到一个汉字在GB2312中的序号:order=94*(区号-1)+(位号-1)(减1是因为区位号从1开始)。
因为计算机中存储的是机内码,机内码高低字节分别减去0XA0可得到区位码:
区号=AB-0XA0;位号=CD-0XA0;
故由机内码得到一个汉字在GB2312中的序号:order=94*(AB-0XA1)+(CD-0XA1)
对于16x16点阵字库,每个汉字占32字节,故该汉字在字库文件中的距离文件头的偏移字节数为:
offset=[(AB-0XA1)*94+(CD-0XA1)]*32
程序:
证明:
GB2312编码对所收录字符进行了分区处理,共94区,每区含有94位,这种表示方式称为区位码。
如“啊"位于16区的01位,所以它的区位码就是1601(区位码用十进制表示)。
由区位码得到一个汉字在GB2312中的序号:order=94*(区号-1)+(位号-1)(减1是因为区位号从1开始)。
因为计算机中存储的是机内码,机内码高低字节分别减去0XA0可得到区位码:
区号=AB-0XA0;位号=CD-0XA0;
故由机内码得到一个汉字在GB2312中的序号:order=94*(AB-0XA1)+(CD-0XA1)
对于16x16点阵字库,每个汉字占32字节,故该汉字在字库文件中的距离文件头的偏移字节数为:
offset=[(AB-0XA1)*94+(CD-0XA1)]*32
程序:
#include<stdio.h> int main() { FILE*fp=fopen("HZK16","rb"); unsigned char buf[2]; while(scanf("%s",buf)!=EOF) { unsigned int order=94*(buf[0]-0XA1)+(buf[1]-0XA1); unsigned int position=order*32; fseek(fp, position,0); unsigned char tmp[32]; fread(tmp,sizeof(unsigned char),32,fp); for(int i=0;i<32;i++) { //依次显示一个字节中的8位,若为1则显示'*',若为0则显示空格 for(int k=0;k<8;k++) { if((tmp[i]>>(7-k))&0X01) printf("*"); else printf(" "); } if(i%2==1)//每两字节(16位)一换行 printf("\n"); } fseek(fp,0L,0); } fclose(fp); return 0; }
相关文章推荐
- UTF8默认编码下的MYSQL命令框中输入汉字显示乱码的问题 分类: 测试 2013-08-02 14:16 371人阅读 评论(0) 收藏
- 嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示 分类: TI-AM335X arm-linux-Ubuntu 2015-06-24 10:41 338人阅读 评论(0) 收藏
- Windows下基于ADS+J-Link 的ARM开发环境搭建 分类: HI3531 2013-12-02 15:08 581人阅读 评论(0) 收藏
- tkinter显示当前时间 分类: python 2013-06-30 17:08 402人阅读 评论(0) 收藏
- AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表 分类: H1_ANDROID 2013-11-19 22:35 987人阅读 评论(0) 收藏
- linux下的framebuffer显示图片 分类: arm-linux-Ubuntu 2013-08-12 15:43 506人阅读 评论(0) 收藏
- c# 将日志文件显示在RichTextBox控件里 分类: .NET 2012-12-18 15:54 722人阅读 评论(0) 收藏
- c# 将日志文件显示在WebBrowser控件中 分类: .NET 2012-12-18 16:03 781人阅读 评论(0) 收藏
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制 分类: vxWorks 2014-03-12 09:43 481人阅读 评论(0) 收藏
- directdraw显示yuv422(yuy2) 分类: VC++ 2013-11-14 14:58 932人阅读 评论(0) 收藏
- 使用DirectDraw直接显示YUV视频数据 分类: windows驱动程序WDM 2013-08-15 11:44 1075人阅读 评论(0) 收藏
- directdraw的多画面显示rgb 分类: VC++ 2013-11-13 08:51 514人阅读 评论(0) 收藏
- tkinter文本显示用户输入 分类: python 小练习 python 2013-06-30 17:17 440人阅读 评论(0) 收藏
- 视频显示格式720p 分类: 生活百科 2014-01-25 11:16 605人阅读 评论(0) 收藏
- hi3531的hifb显示1080p60Hz 分类: HI3531 arm-linux-Ubuntu 2014-03-22 10:43 1061人阅读 评论(2) 收藏
- VS2010 C++学习(5):基于DirectShow的视频预览录像程序 分类: VC++ DirectX 2014-01-20 11:14 953人阅读 评论(0) 收藏
- VC中基于 Windows 的精确定时 分类: VC++ 2013-08-10 09:12 639人阅读 评论(1) 收藏
- ARM开发软件ADS教程 分类: arm-linux-Ubuntu 2013-07-22 16:30 359人阅读 评论(0) 收藏
- MFC下用sdl 显示bmp、rgb、yuv 分类: windows驱动程序WDM VC++ ffmpeg-SDL-VLC-Live555 DirectX 2013-08-16 18:11 1114人阅读 评论(0) 收藏
- 在文本域中依次显示一段设置好的文本 分类: 网页编程【html、js】 2009-12-05 19:42 395人阅读 评论(0) 收藏