在C語言中顯示漢字

    在許多C程序設計中,要用到漢字進行提示或人機交互,而現行的Turbo C集成開發環境不是漢化的,如何編制能顯示漢字的C程序呢? 

  下面的方法可以幫你在西文環境下顯示漢字。這種方法是調用中文漢字庫進行漢字顯示。國家標準規定:漢字庫分94個區,每個區有94個漢字(以位作區別),每個漢字在漢字庫中有確定的區和位編號,這就是漢字的區位碼。每個漢字在庫中是以點陣字模形式存儲的,一般採用16×16點陣(32字節)、24×24點陣(72字節),每個點用一個二進制位(0或1)表示,對應在屏幕上顯示出來,就是相應的漢字。 

  由於在中文環境下,輸入的是漢字的內碼,我們必須將之轉換成區位碼,算出偏移量,從字庫中找到對應的漢字,將其字模顯示即可。 

  內碼轉換成區位碼方法如下: 

   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編譯系統下運行成功,它可以將漢字放大顯示,讀者可以將它改成函數用在您的程序中顯示漢字。 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章