當前位置:編程學習大全網 - 編程語言 - C語言是如何用16點陣方法輸出漢字的?

C語言是如何用16點陣方法輸出漢字的?

到目前為止,我們編寫的C 程序,其用於人機交互的提示或菜單都是英文

的,那麽如何在沒有漢化的Turbo C 集成開發環境下編制顯示漢字的程序呢?

解決這壹編程問題,我們首先必須了解有關漢字編碼及字庫的知識。根據對漢字使

用頻率的研究,可把漢字分成高頻字(約100 個),常用字(約3000 個),次常用字(約4000 個),

罕見字(約8000 個)和死字(約45000 個),即正常使用的漢字達15000 個。我國1981 年公布

了《通訊用漢字字符集(基本集)及其交換碼標準》GB2312-80 方案,把高頻字、常用字、和

次常用字集合成漢字基本字符集(***6763 個),在該集中按漢字使用的頻度,又將其分為壹

級漢字3755 個(按拼音排序)、二級漢字3008 個(按部首排序),再加上西文字母、數字、圖

形符號等700 個。

漢字編碼:

區位碼

國家標準的漢字字符集(GB2312—80)在漢字操作系統中是以漢字庫的形式提供的。漢

字庫結構作了統壹規定,即將字庫分成94 個區,每個區有94 個漢字(以

位作區別)每壹個漢字在漢字庫中有確定的區和位編號(用兩個字節),這就是所謂的區位碼

(區位碼的第壹個字節表示區號,第二個字節表示位號,因而只要知道了區位碼,就可知道

該漢字在字庫中的地址,每個漢字在字庫中是以點陣字模形式存儲的,如壹般采用16×16

點陣形式,每個點用壹個二進位表示,存1 的點,當顯示時,可以在屏上顯示壹個亮點,存

0 的點,則在屏上不顯示,這樣把存某字的16×16 點陣信息直接用來在顯示器上按上述原

則顯示,則將出現對應的漢字。

內碼

漢字使用兩字節表示,國家制定了統壹標準,稱為國標碼。國標碼規定,每個字節使用

後面7 位,第壹位為0。為了區別於英文的ASCII 碼,國標碼在計算機上使用的時候,規定

漢字每個字節第壹位設置為1,以表示該兩字節為漢字,稱為內碼。以“大”字為例子:

國標碼3473H: 0 0 1 1 0 1 0 0 0 1 1 1 0 0 1 1

內碼B4F3H: 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1

國標碼與內碼有壹定的轉換公式,即16 進制的區位碼,兩個字節各加80H,就成為了

國標碼。

漢字字模在字庫中存放的位置根據漢字的區位碼來確定,內碼是漢字在機內的表示。由

於區位碼和內碼存在固定的轉換關系,所以當在支持漢字輸入的系統中,鍵盤輸入的漢字內

碼即在程序中存在,將其轉換為區位碼,再從字庫中找到對應的漢字字模,然後再用有關的

位操作和循環語句,對每個字節的每壹位進行判斷,如同過濾壹樣,如果某位是1,則按設

置的顏色在屏幕的相應位置畫點(用graphics.h 中的顯示象素點的函數putpixel()),若某位

為0,則不畫點,這樣就可按預先設置的顏色在相應位置顯示出該漢字來。

內碼到區位碼的轉換

若漢字內碼為十六進制數h2h1l2l1,則區號qh 相位號wh 分別為:

qh= h2h1-0xa0;

wh= l2l1-0xa0;

若用十進制表示內碼為dld2,則

qh=dl-l60;

wh=d2-160;

即區位碼qw 為:

qw=100*(d1-160)十(d2-160);

反過來,若已經知道了區位碼qw。則也可求得區號和位號:

qh=qw/100;

wh=qw-100*qh;

因而該漢字在漢字庫中離起點的偏移位置(以字節為單位),可計算為:

offset=(94*(qh-1)+(wh-1))* 32;

註意:字庫中每1 區有94 個字符。

這樣,就可以找尋到文件的偏移量,讀出壹個char bytes[32]數組。這樣bytes 數組中則

存了要顯示漢字的16×16 點陣字模,然後將字模按行掃描的辦法,通過循環用putpixel()函

數在屏幕設定位置顯示出象點,因而組合成壹個顯示的漢字。

  • 上一篇:如何快速學習編程?有哪些學習方法?
  • 下一篇:如何獲得帶通訊功能的分時指定時間段的最高價?
  • copyright 2024編程學習大全網