的,那麽如何在沒有漢化的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()函
數在屏幕設定位置顯示出象點,因而組合成壹個顯示的漢字。