日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汉字字库

發(fā)布時(shí)間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉字字库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

采用C和C++文件函數(shù)自定義小型漢字庫實(shí)例

羅躍惠

1 C和C++文件函數(shù)

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

表1 標(biāo)準(zhǔn)文件函數(shù)功能表

函數(shù)名稱功能說明
fopen()打開文件FILE*fopen(char*filename,*mode)
fclose()關(guān)閉文件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()按格式將數(shù)據(jù)寫到指定的文件中fprintf(FILE*fp,char *format)
fscanf()從指定的文件按格式輸入數(shù)據(jù)int fscan(FILE*fp, char*format)
feof()檢測文件是否結(jié)束int feof(FILE*fp)
fseek()改變文件指針位置int fseek(FILE*fp,long offset,int base
fread()從指定文件中讀取數(shù)據(jù)項(xiàng)int fread(char*pt,unsigned size,unsigned n,FILE*fp)
rewind()設(shè)定文件起始位置void rewind(FILE*fp)
  其中打開文件的操作類型(mode)規(guī)定為:“r”為打開文件只讀;“w”為建立文件只寫;“a”為增補(bǔ),如文件中存在則建立;“r+”為打開文件讀寫;“w+”為建立文件讀寫;“a+”為打開或建立文件增補(bǔ);“b”為二進(jìn)制文件;“t”為ASCⅡ碼文件(系統(tǒng)默認(rèn))。
1.2 非標(biāo)準(zhǔn)文件函數(shù)
  非標(biāo)準(zhǔn)文件函數(shù)主要包括文件的打開、關(guān)閉,讀寫等,其主要功能如表2所示。

表2 非標(biāo)準(zhǔn)文件函數(shù)功能表

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

2 兩類文件函數(shù)在漢字字庫中的使用

2.1 點(diǎn)陣字庫的組成
  根據(jù)國家標(biāo)準(zhǔn)GB2312-80規(guī)定的區(qū)碼和位碼輸入漢字,漢字是用2個(gè)字節(jié)的區(qū)位碼存放在計(jì)算機(jī)中,高字節(jié)為區(qū)碼,低字節(jié)為位碼,每個(gè)區(qū)有94個(gè)漢字。從15區(qū)開始為漢字,前面有9個(gè)區(qū)為特殊符號(hào)。漢字的點(diǎn)陣字庫也是按區(qū)位碼的結(jié)構(gòu)來放置漢字點(diǎn)陣的。如24點(diǎn)陣字庫是由24×24個(gè)點(diǎn)組成。一個(gè)字節(jié)可以表示8個(gè)字形點(diǎn),共需3×24=72字節(jié)。若已知某漢字區(qū)碼為C1,位碼為C2,那么此漢字字形在24點(diǎn)陣字庫中位置以[(C1-15)×94+ C2]×72為首地址開始的72字節(jié)。
2.2 自定義小型漢字庫實(shí)例
  采用上述方法,筆者自定義一個(gè)小型漢字庫,由區(qū)位碼讀取24點(diǎn)陣漢字并直接在顯示器上顯示。
  在程序1中,使用標(biāo)準(zhǔn)文件函數(shù)(緩沖區(qū)),在UCDOS5.0漢字HZK.24F中取得6個(gè)漢字(淮南工業(yè)學(xué)院)的字模,建立自定義的小型漢字庫HZK.24。在程序2中,使用非標(biāo)準(zhǔn)文件函數(shù),讀取HZK.24中漢字字模,顯示在屏幕上,并且可旋轉(zhuǎn)、放大和傾斜。
   /*程序1*/
/*自定義小型24點(diǎn)陣漢字庫*/
/*由ucdosHZK24f采集*/
/*使用標(biāo)準(zhǔn)文件函數(shù)*/
#include <stdio.h>
#include ″string.h″
#include <string.h>
void main()
 {
 FILE *fp1.*fp2;
unsigned char c, *p=″淮南工業(yè)學(xué)院″;
 unsigned char i1,i2,c1,c2;
 int rec,j,i;
 float 1;
 /*ucdos漢字操作系統(tǒng)24點(diǎn)陣字庫*/
 fp1=fopen(″hzk24f″,″rb″);
  if(fp1==0)
  {cputs(″Error on open hzk24f!″);
  exit(1);}
 /*自定義小型24點(diǎn)陣字庫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點(diǎn)陣漢字庫*/
/*HZK.24*/
/*使用標(biāo)準(zhǔn)文件函數(shù)*/
#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);}
}

轉(zhuǎn)自:http://blog.chinaunix.net/u/19671/showart.php?id=201961

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。