在國標gd2312—80中規定,所有的國標漢字及符號分配在乙個94行、94列的方陣中,方陣的每一行稱為乙個「區」,編號為01區到94區,每一列稱為乙個「位」,編號為01位到94位,方陣中的每乙個漢字和符號所在的區號和位號組合在一起形成的四個阿拉伯數字就是它們的「區位碼」。區位碼的前兩位是它的區號,後兩位是它的位號。用區位碼就可以唯一地確定乙個漢字或符號,反過來說,任何乙個漢字或符號也都對應著乙個唯一的區位碼。漢字「母」字的區位碼是3624,表明它在方陣的36區24位,問號「?」的區位碼為0331,則它在03區3l位。
漢字的機內碼是指在計算機中表示乙個漢字的編碼。機內碼與區位碼稍有區別。如上所述,漢字區位碼的區碼和位碼的取值均在1~94之間,如直接用區位碼作為機內碼,就會與基本ascii碼混淆。為了避免機內碼與基本ascii碼的衝突,需要避開基本ascii碼中的控制碼(00h~1fh),還需與基本ascii碼中的字元相區別。為了實現這兩點,可以先在區碼和位碼分別加上20h,在此基礎上再加80h(此處「h」表示前兩位數字為十六進製制數)。經過這些處理,用機程式碼頁示乙個漢字需要佔兩個位元組,分別 稱為高位位元組和低位位元組,這兩位位元組的機內碼按如下規則表示:
高位位元組 = 區碼 + 20h + 80h(或區碼 + a0h)
低位位元組 = 位碼 + 20h + 80h(或位碼 + aoh)
由於漢字的區碼與位碼的取值範圍的十六進製制數均為01h~5eh(即十進位制的01~94),所以漢字的高位位元組與低位位元組的取值範圍則為a1h~feh(即十進位制的161~254)。
例如,漢字「啊」的區位碼為1601,區碼和位碼分別用十六進製制表示即為1001h,它的機內碼的高位位元組為b0h,低位位元組為a1h,機內碼就是b0a1h。
在漢字的點陣字型檔中,每個位元組的每個位都代表乙個漢字的乙個點,每個漢字都是由乙個矩形的點陣組成,
0 代表沒有,
1 代表有點,將
0 和1 分別用不同顏色畫出,就形成了乙個漢字,常用的點陣矩陣有
12*12, 14*14, 16*16
三種字型檔。
字型檔根據位元組所表示點的不同有分為橫向矩陣和縱向矩陣,目前多數的字型檔都是橫向矩陣的儲存方式
( 用得最多的應該是早期
ucdos
字型檔 )
,縱向矩陣一般是因為有某些液晶是採用縱向掃瞄顯示法,為了提高顯示速度,於是便把字型檔矩陣做成縱向,省得在顯示時還要做矩陣轉換。我們接下去所描述的都是指橫向矩陣字型檔。
點陣字型檔對於
16*16
的矩陣來說,它所需要的位數共是
16*16
= 256
個位,每個位元組為
8 位,因此,每個漢字都需要用
256/8=32
個位元組來表示。
即每兩個位元組代表一行的
16 個點,共需要
16 行,顯示漢字時,只需一次性讀取
32 個位元組,並將每兩個位元組為一行列印出來,即可形成乙個漢字。
點陣結構如下圖所示:
第一位元組
第二位元組
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
與12*12點陣字型檔對於
14*14
和 12*12
的字型檔,理論上計算,它們所需要的點陣分別為
(14*14/8)=25, (12*12/8)=18
個位元組,但是,如果按這種方式來儲存,那麼取點陣和顯示時,由於它們每一行都不是
8 的整位數,因此,就會涉到點陣的計算處理問題,會增加程式的複雜度,降低程式的效率。
為了解決這個問題,有些點陣字型檔會將
14*14
和 12*12
的字型檔按
16*14
和 16*12
來儲存,即,每行還是按兩個位元組來儲存,但是
14*14
的字型檔,每兩個位元組的最後兩位是沒有使用,
12*12
的位元組,每兩位元組的最後
4 位是沒有使用,這個根據不同的字型檔會有不同的處理方式,所以在使用字型檔時要注意這個問題,特別是
14*14
的字型檔。
漢字點陣字型檔是根據區位碼的順序進行儲存的,因此,我們可以根據區位來獲取乙個字型檔的點陣,它的計算公式如下:
點陣起始位置= ((區碼- 1)*94 + (位碼– 1)) *漢字點陣位元組數
獲取點陣起始位置後,我們就可以從這個位置開始,讀取出乙個漢字的點陣。
前面我們己經講過,漢字的區位碼和機內碼的關係如下:
機內碼高位位元組 = 區碼 + 20h + 80h(或區碼 + a0h)
機內碼低位位元組 = 位碼 + 20h + 80h(或位碼 + aoh)
反過來說,我們也可以根據機內碼來獲得區位碼:
區碼 = 機內碼高位位元組 - a0h
位碼 = 機內碼低位位元組 - aoh
將這個公式與獲取漢字點陣的公式進行合併計就可以得到漢字的點陣位置。
漢字點陣字型檔原理
漢字點陣字型檔原理 一 漢字編碼 1.區位碼 在國標gd2312 80中規定,所有的國標漢字及符號分配在乙個94行 94列的方陣中,方陣的每一行稱為乙個 區 編號為01區到94區,每一列稱為乙個 位 編號為01位到94位,方陣中的每乙個漢字和符號所在的區號和位號組合在一起形成的四個阿拉伯數字就是它們...
點陣字型檔程式設計原理
今天在讀乙個板子上的 時看到了關於點陣字型檔的程式設計,翻遍了整個網路才找到一點資料,以下是來自網路和我自己整理的一點資料。一般我們使用16 16的點陣宋體字庫,所謂16 16,是每乙個漢字在縱 橫各16點的區域內顯示的。不過後來又有了hzk12 hzk24,hzk32和hzk48字型檔及黑體 楷體...
點陣字型檔結構以及點陣字顯示的實現原理
點陣字型檔結構以及點陣字顯示的實現原理 2008 10 08 14 32 在 dos 下作遊戲要實現漢字或英文的輸出,一般都是使用的點陣字型檔技術。這樣可以使程式有更好的相容性。那麼我們如何在程式中使用點陣字型檔呢,這片文件將會講解這個。先講講什麼是點陣字型檔,我首先需要理解的是點陣字型檔是乙個資料...