日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

汉字字库

發布時間:2023/12/18 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉字字库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

采用C和C++文件函數自定義小型漢字庫實例

羅躍惠

1 C和C++文件函數

  C或C++都提供了兩類關于文件的函數,一類是標準文件函數,另一類是非標準文件函數。標準文件函數,即有緩沖區的輸入和輸出(Buffered I/O),又稱高級磁盤輸入輸出(高級I/O)。非標準文件函數,即無緩沖區的輸入和輸出(Unbuffered I/O),又稱低級輸入和輸出(低級I/O),表示輸入和輸出的動作是直接在磁盤內執行讀寫信息的動作。
  對這兩種文件操作,C和C++是放在不同庫中。C和C++標準文件函數是包含在stdio.h文件中,而非標準文件函數是包含在fcntl.h文件內,所以在使用這兩類函數時必須區別調用。
1.1 標準文件函數
  標準文件函數主要包括文件的打開、關閉、讀寫等。其主要功能如表1所示。

表1 標準文件函數功能表

函數名稱功能說明
fopen()打開文件FILE*fopen(char*filename,*mode)
fclose()關閉文件int fclose(FILE*fp)
fputc()把字符輸出到指定文件int fputc(char ch, FILE*fp)
fgetc()從指定的文件中取得字符int fgetc(FILE*fp)
fputs()把字符串輸出到指定文件中int fputs(char*str, FILE*fp)
fgets()從指定文件中讀取字符串int gets(char*str, in n, FILE*fp)
fprntf()按格式將數據寫到指定的文件中fprintf(FILE*fp,char *format)
fscanf()從指定的文件按格式輸入數據int fscan(FILE*fp, char*format)
feof()檢測文件是否結束int feof(FILE*fp)
fseek()改變文件指針位置int fseek(FILE*fp,long offset,int base
fread()從指定文件中讀取數據項int fread(char*pt,unsigned size,unsigned n,FILE*fp)
rewind()設定文件起始位置void rewind(FILE*fp)
  其中打開文件的操作類型(mode)規定為:“r”為打開文件只讀;“w”為建立文件只寫;“a”為增補,如文件中存在則建立;“r+”為打開文件讀寫;“w+”為建立文件讀寫;“a+”為打開或建立文件增補;“b”為二進制文件;“t”為ASCⅡ碼文件(系統默認)。
1.2 非標準文件函數
  非標準文件函數主要包括文件的打開、關閉,讀寫等,其主要功能如表2所示。

表2 非標準文件函數功能表

函數名稱功能說明
creat()建立一個原來不存在的文件int cread(char *filename,int mode)
open()打開已有文件int open(char *filename,int mode)
close()關閉已打開的文件int close(int fp)
read()從指定文件讀入數據存入指定區域int read(int fd,char *buf unsigned count)
write()把指定區域數據寫入指定文件int write(int fd,char *buf,unsigned count)
lseek()移動文件位置指針int lseek(int fd,long offset,int frimwhile)
 其中打開文件的操作類型(mode)規定為:“0”——建立只讀文件;“1”——建立只寫文件;“2”——建立讀寫文件。

2 兩類文件函數在漢字字庫中的使用

2.1 點陣字庫的組成
  根據國家標準GB2312-80規定的區碼和位碼輸入漢字,漢字是用2個字節的區位碼存放在計算機中,高字節為區碼,低字節為位碼,每個區有94個漢字。從15區開始為漢字,前面有9個區為特殊符號。漢字的點陣字庫也是按區位碼的結構來放置漢字點陣的。如24點陣字庫是由24×24個點組成。一個字節可以表示8個字形點,共需3×24=72字節。若已知某漢字區碼為C1,位碼為C2,那么此漢字字形在24點陣字庫中位置以[(C1-15)×94+ C2]×72為首地址開始的72字節。
2.2 自定義小型漢字庫實例
  采用上述方法,筆者自定義一個小型漢字庫,由區位碼讀取24點陣漢字并直接在顯示器上顯示。
  在程序1中,使用標準文件函數(緩沖區),在UCDOS5.0漢字HZK.24F中取得6個漢字(淮南工業學院)的字模,建立自定義的小型漢字庫HZK.24。在程序2中,使用非標準文件函數,讀取HZK.24中漢字字模,顯示在屏幕上,并且可旋轉、放大和傾斜。
   /*程序1*/
/*自定義小型24點陣漢字庫*/
/*由ucdosHZK24f采集*/
/*使用標準文件函數*/
#include <stdio.h>
#include ″string.h″
#include <string.h>
void main()
 {
 FILE *fp1.*fp2;
unsigned char c, *p=″淮南工業學院″;
 unsigned char i1,i2,c1,c2;
 int rec,j,i;
 float 1;
 /*ucdos漢字操作系統24點陣字庫*/
 fp1=fopen(″hzk24f″,″rb″);
  if(fp1==0)
  {cputs(″Error on open hzk24f!″);
  exit(1);}
 /*自定義小型24點陣字庫HZK.24*/
 fp2=fopen(″HZK.24″,″wb″);
   while(*p!)=0)
 {.i1=*p+ +;
  i2=*p+ +;
  c1=(i1-Oxa1)&Ox7f;
  c2=(i2-Oxa1)&Ox7f;
    rec=(c1-15)*94+c2;
    1=rec*72L;
    fseek(fp1,1,SEEK-SET);
    for(j=1;j<=72;j+ +){
    c=fgetc(fp1);
    fputc(c,fp2);
     }
  }
 fclose(fp1);
 fclose(fp2);
 }
   /*程序2*/
/*使用自定義小型24點陣漢字庫*/
/*HZK.24*/
/*使用標準文件函數*/
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include″stdlib.h″
#include″math.h″
#include″fcntl.h″
#include<string.h>
#include<io.h>
int ff24;
int j;
float f[9]={0,1,2,3,4,5,6,7,8};
void main()
{
int a;
int driver=DETECT,mode;
initgraph(&driver,&mode,″″);
ff24=open(″HZK.24″,0);
if (ff24==-1)
  {printf(″Error on open hzk.24″);
exit(1);
}
for (j=0;j<6;j+ +){
  puthz24(200,80,j*72L,18);}
  getch();close(ff24);closegraph();
exit(0);
}
int puthz24(x,y,z,color)
int x,y,color;
long z;
{
 unsigned int i,c1,c2;
 int i1,
 i2,i3,i4,i5,rec,r,co;
long l;
unsigned char by[72];
lseek(ff24,z,0);
read(ff24,by,72);
for (i1=0;i1<24;i1+ +)
  for (i2=0;i2<3;i2+ +)
    for (i3=0;i3<8;i3+ +)
    if (by[i1*3+i2](7-i3)&1)
{ r=x+i1+j*24;co=y+i2*8+i3;
    putpixel(r,co,color);}
}

轉自:http://blog.chinaunix.net/u/19671/showart.php?id=201961

總結

以上是生活随笔為你收集整理的汉字字库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。