?? page246.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第9章 圖形顯示</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!導航條>
<p><a href="content1.html">目錄</a> <a href="page245.html">上一頁</a> <a href="page247.html">下一頁</a> <a href="page269.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!標尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td>
</tr>
<!頁眉行>
<tr height=60 valign="bottom">
<td></td><td>-246-</td><td></td> <!頁碼>
<td colspan=6>PC機匯編語言實戰精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!書名>
<td></td><td></td><td></td> <!右側空白>
</tr>
<!頁眉線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋體" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!頂部空白>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
的字模庫,如UCDOS所帶的HZK16(HZK16F為繁體)。如果能夠搞清這些字模庫的結構,就可以從這些字模庫中提取出漢字字模數據。為此要先搞清漢字的編碼方法。<br>
GB-2312-80標準一共收錄了6763個常用的漢字和682個全角符號,一共是7445個字符。這些文字和符號是分區存放的,下面給出的這個表就是第1區內收錄的字符和第16區內收錄的漢字,可以看出一個區內共有漢字94個,為了便于漢字的檢索,我們根據漢字所在的區號與這個漢字在所在區中的偏移位置為每個漢字編了碼,比如"啊"字是第16區的第一個字,所以編碼為1601;"白"字是第16區的第55個字,所以編碼為1655;同理"剝"字編碼為1694。<br>
由于這種編碼方法是根據某個漢字的"區"與"位"而來,所以這種編碼一般稱為"區位"碼,左面兩位稱"區碼",右面兩位稱"位碼"。根據漢字的區位碼我們就可以計算出某個漢字在整個字庫中的偏移位置,公式為"(區碼-1) 94+位碼"。<br>
區位碼僅僅用于漢字的檢索,真正在機器內部并不用區位碼表示漢字。我們都清楚凡是字符在機器內部都是用一些數字表示的,用于表示字符的這些數字就稱為字符的編碼。在PC系統中西文字符最帶用的編碼系統為ASCII碼,每一個字符對應一個字節的數據。那么如何用數字表示漢字呢?<br>
最容易想到的一個方案就是直接用區位碼表示漢字。這確實是個方案,不過它并不可行。可以舉個很簡單的例子來說明:比如從鍵盤輸入一個字符串"HELLO!"主機就會從鍵盤接收到這樣一串數字--72、69、76、76、79、33(用十進制表示)。如果漢字是用區位碼表示的話,對于這樣一串數字計算機就可以有兩種理解,或者將其理解為"HELLO!",或者將其理解為"楨襖锪"。計算機究竟響應哪一個呢?除非我們給計算機足夠的智能使其自己能判斷"楨襖锪"沒有意義,否則計算機將無所適從。<br>
實際上給漢字進行編碼還是有規律可循的。首先我們應該明確下面這樣一些事實:<br>
<font face="楷體_GB2312">
(1)漢字的內碼必須由兩個字節組成;中文字符共有七千多個,必須用兩個字節才能無重復地表示所有中文字符。<br>
(2)漢字的內碼不能占用標準打字鍵盤上所有西文字符的ASCII碼,而且漢字的編碼應該容易與西文字符區分;<br>
(3)漢字的內碼應該可以用某種算法轉換為對應的區位碼;因為區位碼可以在國標漢字庫中檢索漢字。<br>
</font>
這是三項最基本的規律,根據這三點我們來看看漢字的實際編碼方案是怎樣的。<br>
組成漢字內碼的兩個字節其最高位都為1,即兩個數字都大于127(也可以理解為兩個都是負數,無所謂)。西文字符都集中于ASCII碼表的前半部分,即基本ASCII碼表之中,漢字內碼采用了擴展ASCII碼,這樣即可做到不與西文字符相沖突,而且也便于區分漢字與西文字符。<br>
具體地說這表示漢字的兩個字節都是從0A1H開始,表8-1給出了漢字庫中最前面兩區全角字符的內碼,可以看到內碼的低字節可以用于區分漢字所在的區,而高字節可以區分漢字在其所在區中的位置。<br>
這樣的內碼是很容易轉換成區位碼的,"區碼=內碼低字節-0A0H,位碼=內碼高字節-0A1H"。由此可見這種編碼方式是符合前述三個基本原則的,不過它也有一些弊病,比如西文制表符在中文系統中往往被顯示成一些漢字。好在這不是主要矛盾,把"┌─"當成"諛"總比把"HELLO!"當成"楨襖锪"要強。<br>
結合前面講的利用區位碼計算漢字在整個漢字庫中偏移量的公式,即可得出通過漢字內碼計算漢字在字庫中的偏移量的方法,即:(內碼低字節-0A1H)x94+(內碼高字節-0A1H)。
</td>
<td></td><td></td> <!右邊距>
</tr>
</font>
<!頁腳線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!頁腳>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!導航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page245.html">上一頁</a> <a href="page247.html">下一頁</a> <a href="page269.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -