在計算機中英文可以使用 ascii 碼來表示,而漢字使用的是擴充套件 ascii 碼,並且使用兩個擴充套件 ascii 碼來表示乙個漢字。乙個 ascii 碼使用乙個位元組表示,所謂擴充套件 ascii 碼,也就是 ascii 碼的最高位是1的 ascii 碼,簡單的說就是碼值大於等於 128 的 ascii 碼。乙個漢字由兩個擴充套件 ascii 碼組成,第乙個擴充套件 ascii 碼用來存放區碼,第二個擴充套件 ascii 碼用來存放位碼。在 gb2312-80 標準中,將所有的漢字分為94個區,每個區有94個位可以存放94個漢字,形成了人們常說的區位碼,這樣總共就有 94*94=8836 個漢字。在點陣字型檔中,漢字點陣資料就是按照這個區位的順序來存放的,也就是最先存放的是第乙個區的漢字點陣資料,在每乙個區中有是按照位的順序來存放 的。在漢字的內碼中,漢字區位碼的存放實在擴充套件 ascii 基礎上存放的,並且將區碼和位碼都加上了32,然後存放在兩個擴充套件 ascii 碼中。具體的說就是:
第乙個擴充套件ascii碼 = 128+32 + 漢字區碼
第二個擴充套件ascii嗎 = 128+32 + 漢字位碼
如果用char hz[2]來表示乙個漢字,那麼我可以計算出這個漢字的區位碼為:
區碼 = hz[0] - 128 - 32 = hz[0] - 160
位碼 = hz[1] - 128 - 32 = hz[1] - 160。
這樣,我們可以根據區位碼在檔案中進行殉職了,定址公式如下:
漢字點陣資料在字型檔檔案中的偏移 = ((區碼-1) * 94 + 位碼) * 乙個點陣字模占用的位元組數
在定址以後,即可讀取漢字的點陣資料到緩衝區進行顯示了。以下是實現**:
/* 輸出乙個漢字的函式 */
void _draw_hz(char hz[2], file *fp, int x, int y, int w, int h, int color)
以上介紹完了中文點陣字型檔的原理,當然還有英文點陣字型檔了。英文點陣字型檔中單個點陣字模資料的存放方式與中文是一模一樣的,也就是對我們所寫的 _draw_model 函式同樣可以使用到英文字型檔中。唯一不同的是對點陣字型檔的定址上。英文使用的就是 ascii 碼,其碼值是0到127,定址公式為:
英文點陣資料在英文點陣字型檔中的偏移 = 英文的ascii碼 * 乙個英文本模占用的位元組數
可以看到,區分中英文的關鍵就是,乙個字元是 ascii 碼還是擴充套件 ascii 碼,如果是 ascii 碼,其範圍是0到127,這樣是使用的英文字型檔,如果是擴充套件 ascii 碼,則與其後的另乙個擴充套件 ascii 碼組成漢字內碼,使用中文字庫進行顯示。只要正確區分 ascii 碼的型別並進行分別的處理,也就能實現中英文本串的混合輸出了。
另外,乙個 m*n 的點陣所占用的位元組數為 (m+7)/8*n。
點陣字型 ASCII碼 漢字型檔 自我學習 簡單總結
學習各種大小點陣字型顯示,參考網上資料,簡單記錄一下!第一部分 點陣字型資料的存放格式 最常見的是16 16 的點陣,意思是說每1行有16個點,一共有16行。由於1個點使用1個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要16個...
漢字型檔HZK16的簡單介紹
hzk16 字型檔是符合gb2312標準的16 16點陣字型檔,hzk16的gb2312 80支援的漢字有6763個,符號682個。其中一級漢字有3755個,按聲序排列,二級漢字有3008個,按偏旁部首排列。我們在一些應用場合根本用不到這麼多漢字字模,所以在應用時就可以只提取部分字型作 為己用。hz...
字元 漢字在機器中的表示
字元 漢字在機器中的表示 字元的表示 人們可以通過鍵盤和顯示器輸入和顯示不同的字元,但在計算機中,所有資訊都 是用二進位制 表示。n位二進位制 能表示 2n個不同的字元,這些字元的不同組合就可表示不同的資訊。為使計算機使用的資料 能共享和傳遞,必須對字元進行統一的 編碼。1 ascii 碼 美國標準...