



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言是如何用16点阵方法输出汉字的?到目前为止,我们编写的c程序,其用于人机交互的提示或菜单都是英文的,那么如何在没有汉化的Turbo C集成开发环境下编制显示汉字的程序呢?解决这一编程问题,我们首先必须了解有关汉字编码及字库的知识。根据对汉字使用频率的研究,可把汉字分成高频字(约100个),常用字(约3000个),次常用字(约4000个),罕见字(约8000个)和死字(约45000个),即正常使用的汉字达15000个。我国1981年公布了通讯用汉字字符集(基本集)及其交换码标准 GB2312-80方案,把高频字、常用字、和 次常用字集合成汉字基本字符集(共6763个),在该集中按汉字使用的
2、频度,又将其分为一级汉字3755个(按拼音排序)、二级汉字3008个(按部首排序),再加上西文字母、数字、图 形符号等700个。汉字编码: 区位码 国家标准的汉字字符集(GB2312 80)在汉字操作系统中是以汉字库的形式提供的。汉字库结构作了统一规定,即将字库分成94个区,每个区有 94个汉字(以位作区别)每一个汉字在汉字库中有确定的区和位编号(用两个字节),这就是所谓的区位码(区位码的第一个字节表示区号,第二个字节表示位号,因而只要知道了区位码,就可知道 该汉字在字库中的地址,每个汉字在字库中是以点阵字模形式存储的,如一般采用16X 16点阵形式,每个点用一个二进位表示,存1的点,当显示时
3、,可以在屏上显示一个亮点,存0的点,则在屏上不显示,这样把存某字的16X 16点阵信息直接用来在显示器上按上述原则显示,则将出现对应的汉字。内码汉字使用两字节表示,国家制定了统一标准,称为国标码。国标码规定,每个字节使用后面7位,第一位为0。为了区别于英文的 ASCII码,国标码在计算机上使用的时候,规定 汉字每个字节第一位设置为1,以表示该两字节为汉字,称为内码。以"大”字为例子:国标码 3473H: 0 0 1 1 0 1 0 0 0 1 1 1 0 0 1 1内码 B4F3H : 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1国标码与内码有一定的转换公式,即16
4、进制的区位码,两个字节各加80H,就成为了国标码。汉字字模在字库中存放的位置根据汉字的区位码来确定,内码是汉字在机内的表示。由于区位码和内码存在固定的转换关系,所以当在支持汉字输入的系统中,键盘输入的汉字内 码即在程序中存在,将其转换为区位码,再从字库中找到对应的汉字字模,然后再用有关的 位操作和循环语句,对每个字节的每一位进行判断,如同过滤一样,如果某位是1,则按设置的颜色在屏幕的相应位置画点(用graphics.h中的显示象素点的函数 putpixel(),若某位为0,则不画点,这样就可按预先设置的颜色在相应位置显示出该汉字来。内码到区位码的转换若汉字内码为十六进制数h2h1l2l1,则区
5、号qh相位号wh分别为:qh= h2h1-0xa0;wh= I2l1-0xa0 ;若用十进制表示内码为dld2,则qh=dl-l60 ;wh=d2-160 ;即区位码qw为:qw=100*(d1-160)十(d2-160);反过来,若已经知道了区位码qw。则也可求得区号和位号:qh=qw/100 ;wh=qw-100*qh;因而该汉字在汉字库中离起点的偏移位置(以字节为单位),可计算为:offset=(94*(qh-1)+(wh-1)* 32;注意:字库中每1区有94个字符。这样,就可以找寻到文件的偏移量,读出一个char bytes32数组。这样bytes数组中则存了要显示汉字的16X 16
6、点阵字模,然后将字模按行扫描的办法,通过循环用putpixel()函数在屏幕设定位置显示出象点,因而组合成一个显示的汉字。在C语言中显示汉字在许多C程序设计中,要用到汉字进行提示或人机交互,而现行的Turbo C集成开发环境不是汉化的,如何编制能显示汉字的 C程序呢?下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字 库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16X 16点阵(32字节)、24X 24点阵(72字节),每个点用一个二进制位(
7、0或1)表示,对应在屏幕上显示出来,就是相应的汉字。由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉 字,将其字模显示即可。内码转换成区位码方法如下:qh=c1 0xa0 wh=c2 0xa0其区位码就是:qw=qh 衣 0xff +wh该汉字在字库中离起点的位置是:offset=(94 * (qh 1)+ (wh 1) * 32L程序例:# includegraphics.h ># includestdio.h ># includefentl.h ># include io.h ># in elude stdlib.h
8、># in elude coni o.h ># define ROW 1/纵坐标放大倍数# define COL 2/横坐标放大倍数void mai n()int x,y;char * s="汉字显示程序";FILE * fp;char buffer32;/buffer 用来存储一个汉字register m,n ,i,j,k;un sig ned char qh,wh;un sig ned long offset;in t gd=DETECT,gm;/图形屏幕初始化initgraph( & gd, & gm, );if (fp=fopen( &q
9、uot; hzk16" ," rb" )=NULL)/打开汉字库,该字库可以在uedos中找到 printf( " Can' t open haz16,Please add it"); getch(); closegraph(); exit(0);x=20; y=100; /显示位置设置while( * s) qh= * (s) 0xa0; /汉字区位码wh= * (s+ 1) 0xa0;offset=(94 * (qh 1) +(wh 1) * 32L;/计算该汉字在字库中偏移量fseek(fp,offset,SEEK_SET);fread(buffer,32,1,fp); II取出汉字32字节的点阵字模存入buffer中for (i=0;i 16;i + + )将32位字节的点阵按位在屏幕上打印出来for(n=0;n ROW;n + + )for(j=0;j 2;j + + )for(k=0;k 8;k + + )for(m=0;m COL;m + )if (bufferi * 2 + j >> (7 k) & 0x1)!=NULL)putpixel(x + 8* j * COL + k * COL + m,y + i * R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度个体工商户门面经营权转让合同
- 二零二五年度美团商家社会责任与公益活动合作协议
- 二零二五年度专业旅游公司个人导游司机雇佣合同
- 二零二五年度销售人员保密义务与离职交接规范合同
- 幼儿运动会幼儿发言稿
- 2025年喀什考货运资格证模拟试题
- 2025年铜仁货运上岗证考试题库答案
- 2025年宿州货运从业资格证考试题
- 2025年昌吉货运准驾证模拟考试
- 竞选卫生委员发言稿
- 道德与法治统编版六年级下册全册大单元任务群教学设计四个单元
- 牙周病科普讲座课件
- 工业地产营销推广方案
- 2024年贵州能源集团电力投资有限公司招聘笔试参考题库附带答案详解
- 华南师范大学附属小学招聘教师笔试真题2022
- 中冶集团《工程总承包项目管理手册》-
- 铁路轨道与修理
- 职场角色认知与自我定位
- 化工设备机械基础复习及答案汇总
- 心肌梗死后心衰病例分享
- 四年级全册《劳动》课程知识点汇总精排
评论
0/150
提交评论