版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、先说明一下:在TC下面显示汉字是比较麻烦的,实在想用,可以用VC。DOS下的点阵汉字你是否碰到过用启动盘启动系统后用DIR命令得到一串串莫名其妙的字符?有经验的朋友会告诉你:那是汉字。汉字?你不禁会问:怎么一个我一个也不认识。但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。同样是汉字,为什么前后会看到不同的结果?呵呵,其实在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,这铁玩意认识的概念只有内码。汉字的内码点头表示什么?是“对”、“YES”,偏偏有的地方表示的意义却恰恰相反。一个动作,有不同的诠释;一个问题,有不同的答案;而一个符号,却有不同的意
2、义,关键在于:你是如何地理解。在电脑中亦如此,所有的数据都是以0和1保存的,按不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有5000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。不信,你可以用记事本写一C文件:main(unsigned char *s,*e=ABcd,*c=你好;clrscr(;printf(English char =;s=e;while(*s!=0 /*C的字符串以0为结
3、束符*/printf(%3d,*s;s+;printf(nChinease char=;s=c;while(*s!=0printf(%3d,*s;s+;getch(;再用TC输入*.txt打开运行,看见了没有,那些数值即英文和汉字的各字节内码。汉字字模得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状。在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件HZK
4、16里。汉字库文件了解字母和汉字是按字模位信息显示的原理后,那如何得到汉字的字模信息呢?难道要我们自己去做?NO。DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免去后辈的麻烦,这就是点阵字库文件。一般我们使用16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。不过后来又有了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库。虽然汉字库种类繁多,但都是按照区位的顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:94*
5、(区号-1+位号-1。减1是因为数组是以0为开始而区号位号是以1为开始的。这仅为以汉字为单位该汉字在汉字库中的位置,那么,如何得到以字节为单位得到该汉字在汉字库中的位置呢?只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1+位号-1*一个汉字字模占用字节数,而按每种汉字库的汉字大小不同又会得到不同的结果。以16*16点阵字库为例,计算公式则为:(94*(区号-1+(位号-1*32。汉字库文该从该位置起的32字节信息即记录了该字的字模信息。 点阵汉字的显示了解点阵汉字及汉字库的构成原理后,显示汉字就变得简单。以16*16点阵字库为例,通常的方法是:将文件工作指针移到需要的汉字字模处、将
6、汉字库文件读入一2*16数组再用for循环一位位地显示。以使用VGAHI模式显示“我”字为例,程序如下:#include graphics.h#include stdio.hmain(int i=VGA,j=VGAHI,k;unsigned char mat162,chinease3=我;FILE *HZK;if(HZK=fopen(hzk16,rb=NULLexit(0;initgraph(&i,&j,;i=chinease0-0xa0;j=chinease1-0xa0; /*获得区码与位码*/fseek(HZK,(94*(i-1+(j-1*32l,SEEK_SET;fread(mat,32
7、,1,HZK;for(j=0;j16;j+for(i=0;i2;i+for(k=0;kk /*测试为1的位则显示*/putpixel(i*8+k,j,WHITE;getch(;closegraph(;fclose(HZK;怎么样?只要掌握了正确的方法,显示汉字并不复杂。打印字库文件和HZK12如果你有UCDOS的HZK24S(宋体)、HZK24K(楷体)或HZK24H(黑体),你还可以使用不同字体的大字模汉字了。HZK24系列是24*24的点阵字库,每字模占用3*24字节。如果你按照HZK16的显示方法的话,你会看到.呵呵,字被放倒了。这是因为该类字库与一般的汉字库不同,这类大字模汉字库是专供
8、打印的打印字库,为了打印的方便将字模都放倒了,你使用时,只要将字模的位信息纵横转置显示即可。例如你如果定义为mat243则应该这样输出:for(i=0;i24;i+for(j=0;ji%8&matji/8 /*转置显示*/putpixel(j+x,y+i,color;还有一类字库HZK12,虽然属于标准字库类型,但如果你将它的字模当作12*12位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字摸每行的位数均补齐为8的整数倍,于是实际该字库的位长度是16*12,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。理论差不多了下面是我写的一个实践例子/*TC下的汉字显
9、示演示程序*LO几又VE 22:58 2005-5-23*将hzk16文件放至TC安装目录下*hzk16文件下载地址*下载字体文件*/#include #include #define MAXX 640 /*屏幕宽度 */#define MAXY 480 /*屏幕高度 */#define WIDTH 20 /*每一汉字宽度*/#define HIGH 20 /*每一汉字高度*/int priChi(unsigned char *; /*中文打印函数,传入参数:中文数组指针 返回值 -1 异常 0 正常*/int X=0; /*全局变量X Y控制中文打印格式*/int Y=0;int main(
10、char chinese60=/*TC编译器不支持长行 所以将中文字符串以二维形式存放*/我放弃清华计算机专业的保送资格而选择参加高考的消息震撼了全校,从校长到班主任到各科目任课老师都找我谈过话我有点惊异他们的变,化在我获得全国信息大赛一等奖外加特别奖以前我似乎是个可有可无,的人物突然间变的如此的炙手可热我觉得我的大脑前所未有的不够用,说起这个特别奖还真的挺有意思虽然叫全国决赛但也无非是出几个笔,试题再弄个上机程序编一下限时总共是三小时规定语言是西语言或者,派司卡在我花了半个小时分别用两种语言把该程序完成后我觉得坐在,那实在是浪费我的大好青春于是我决定用汇编语言把它再写一遍本来,我准备用微操作
11、的十六进制码写的但考虑到时间问题只好放弃有人说,是金子总会发光此话诚不欺我啊正当我热火朝天全心投入编程的时候,却不知道自己已经被某人注意了很久了三小时之后我走出考场之后某,人赶紧抓住我很兴奋的叫了一声小朋友这声小朋友直接导致我在数年,后还经常从噩梦中惊醒同时也是我拒绝清华邀请的直接导火索我们把,话题回到事发现场我在吓了很大一跳后把头转了回来一个瘦干老头正,抓着我的手两眼放光的样子还似乎是略带深情的看着我我全身鸡皮疙,瘩顿时争先恐后的向外钻我浑身一个机灵赶紧抖手老头似乎感觉到了,异样送开我的手略带尴尬的道小朋友我自我介绍一下我是清华大学计,算机系的主任受邀到比赛的现场观看顺便看看有没有什么可挖掘
12、的人,才那个你明白我的意思吧这句话很是影响清华学生理解力在我心目中,的地位你这意思不就是认为我是可挖掘的人才吗我点了点头老头看我,能理解显的很兴奋然后开始滔滔不决的向我介绍清华计算机专业的实,力如何如何的雄厚在国内甚至国际是如何如何的有影响力最后满怀深,情的看了我眼严肃的告诉我他将代表清华计算机专业欢迎我去他们那,念书我苦苦忍耐着他的飞溅唾沫委婉的表示这件事非同小可我必须回,家和父母商量一下然后逃也似的离开当然第一个去的地方是卫生间我,的脸啊谁知道老头的唾沫会不会让我的脸起老年斑回到学校的一个礼,拜后我就接到了清华正式邀请这个消息经我班主任的乌鸦嘴迅速在全,校蔓延而后又经过各种渠道迅速汇总到我
13、父母耳朵;if(-1 = priChi(chinese /*打印异常*/printf(Press any key to exit.;fflush(stdin;getch(;return 1;return 0;int priChi(unsigned char *chiunsigned char mat162;int i=VGA,j=VGAHI,k;int sec,pot;FILE *HZK;if(HZK=fopen(hzk16,rb=NULL /*打开字体库文件*/printf(Open style file (hzk16 failed!n;return -1;initgraph(&i,&j,;while(*chisec = *chi-0xa0; /*获得区码*/pot = *(chi+1-0xa0; /*获得位码*/fseek(HZK,(94*(sec-1+(pot-1*32l,SEEK_SET;fread(mat,32,1,HZK;for(j=0;j16;j+for(i=0;i2;i+for(k=0;k k /*测试为1的位则显示*/putpixel(X+i*8+k,Y+j,WHITE;X +=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030智慧消防系统开发与应急管理体系规划
- 超材料热红外成像-洞察与解读
- 2025-2030智慧水务漏损监测系统的人工智能模型优化研究
- 2026陕西西安未央汉城医院招聘6人备考题库附参考答案详解(基础题)
- 固化剂地坪(露骨料)
- 2025-2030智慧文旅建筑行业市场市场发展现状分析及投资收益评估规划研究报告
- 2025-2030智慧教育行业市场深入调研及行业未来与教育科技投资预览
- 2026上半年四川绵阳职业技术学院招才引智招聘7人备考题库(上海场)及参考答案详解(精练)
- 2025-2030智慧建筑行业市场深度调研及发展趋势和投资前景预测研究报告
- 2025-2030智慧市场监管行业现状与创新方向研究报告
- 2025年高考天津卷物理真题(解析版)
- 2025年山东档案职称考试《档案基础理论》考试题库(浓缩500题)
- 投标文件澄清函标准格式
- 2025PACK结构工程师校招笔试题及答案
- 松木桩围挡施工方案
- 机械设备基本知识培训课件
- 零工经济中的女性劳动者权益保障研究
- 消防设施操作员初级实操考试评分标准
- 中药灌肠护理操作规范
- 中国企业出海人力资源挑战白皮书(2024-2025版)
- 西科大雷达对抗原理讲义
评论
0/150
提交评论