请教,如何解决在TC下的中文输入输出问题呢?我加载过PDOS95可以实现,没有好办法吗?

SkyGG 2001-12-16 12:36:02
...全文
43 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SparrowHawk 2001-12-16
  • 打赏
  • 举报
回复
内码转换成区位码方法如下:   
qh=c1-0xa0 wh=c2-0xa0      
其区位码就是:     
qw=qh*0xff+wh   
该汉字在字库中离起点的位置是:     
offset=(94*(qh-1)+(wh-1))*32L   
程序例:   
#include 〈graphics.h〉   
#include 〈stdio.h〉   
#include 〈fcntl.h〉   
#include 〈io.h〉   
#include 〈stdlib.h〉   
#include 〈conio.h〉   
#define ROW 1       //纵坐标放大倍数   
#define COL 2      //横坐标放大倍数   
void main()   
{   
int x,y;   
char *s=″汉字显示程序″;   
FILE *fp;   
char buffer[32];   //buffer用来存储一个汉字   
register m,n,i,j,k;   
unsigned char qh,wh;   
unsigned long offset;   
int gd=DETECT,gm;   //图形屏幕初始化   
initgraph(&gd,&gm,″ ″);   
if ((fp=fopen(″hzk16″,″rb″))==NULL)     
//打开汉字库,该字库可以在ucdos中找到     
{ 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); //取出汉字32字节的点阵字模存入buffer中(一个汉字)    
  for (i=0;i〈16;i++)  //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字  
 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 (((buffer[i*2+j]〉〉(7-k))&0x1)!=NULL)  
 putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);   
  s+=2; //因为一个汉字内码占用两个字节,所以s必须加2    
  x+=30;   
}   
getch();   
closegraph();  
 }   
上述程序在Turbo C 2.0编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字

windindance 2001-12-16
  • 打赏
  • 举报
回复
要么你自己建立一个中文输入环境:)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧