點陣字型 ASCII碼 漢字型檔 自我學習 簡單總結

2021-06-27 01:19:39 字數 3043 閱讀 5984

學習各種大小點陣字型顯示,參考網上資料,簡單記錄一下!

-----第一部分-----點陣字型資料的存放格式----

最常見的是16*16 的點陣,意思是說每1行有16個點,一共有16行。由於1個點使用1個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要16個位元位,而8個位元就是1個位元組,也就是說,這個點陣字型中,一行的資料需要兩個位元組來存放。第1行的前8個點的資料存放在點陣資料的第1個位元組裡面,第1行的後面8個點的資料存放在點陣資料的第2個位元組裡面,第2行的前8個點的資料存放在點陣資料的第3個位元組裡面,然後後面的就以此類推了。這樣我們可以計算16*16 的點陣出存放乙個點陣總共需要32個位元組。

再比如 16*8 的點陣,意思是說每1行有16個點,一共有8行。由於1個點使用乙個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要16個位元位,而8個位元就是1個位元組,也就是說,這個點陣字型中,一行的資料需要2個位元組來存放。第1行的前8個點的資料存放在點陣資料的第1個位元組裡面,第1行的後面8個點的資料存放在點陣資料的第2個位元組裡面,第2行的前8個點的資料存放在點陣資料的第3個位元組裡面,然後後面的就以此類推了。這樣我們可以計算16*8的點陣出存放乙個點陣總共需要16個位元組。

再比如 8*8 的點陣,意思是說每1行有8個點,一共有8行。由於1個點使用1個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要8個位元位,而8個位元就是1個位元組,也就是說,這個點陣字型中,一行的資料需要1個位元組來存放。第1行的資料存放在點陣資料的第1個位元組裡面,第2行的資料存放在點陣資料的第2個位元組裡面,然後後面的就以此類推了。這樣我們可以計算 8*8的點陣出存放乙個點陣總共需要8個位元組。

再比如 24*24 的點陣,意思是說每1行有24個點,一共有24行。由於1個點使用1個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要24個位元位,而8個位元就是1個位元組,也就是說,這個點陣字型中,一行的資料需要3個位元組來存放。第1行的前8個點的資料存放在點陣資料的第1個位元組裡面,第1行的中間8個點的資料存放在點陣資料的第2個位元組裡面,第1行的後面8個點的資料存放在點陣資料的第3個位元組裡面。

第2行的前8個點的資料存放在點陣資料的第4個位元組裡面,第2行的中間8個點的資料存放在點陣資料的第5個位元組裡面,第2行的後面8個點的資料存放在點陣資料的第6個位元組裡面,

然後後面的就以此類推了。這樣我們可以計算 24*24的點陣出存放乙個點陣總共需要72個位元組。

最後也有比較特殊的字型,它不是8的倍數----        

比如 12*12 的點陣,意思是說每1行有12個點,一共有12行。由於1個點使用1個位元位來表示,如果這個位元位的值為1,則表示這個位置有點,如果這個位元位的值為0,則表示這個位置沒有點。從而1行就需要12個位元位,而8個位元就是1個位元組,也就是說,這個點陣字型中,一行的資料需要1個半位元組來存放。但是資料的讀取一般都是以位元組為單位,這樣也是為了方便讀字型檔。因此這裡的格式是:第1行的前8個點的資料存放在點陣資料的第1個位元組裡面,第1行的後面4個點的資料存放在點陣資料的第2個位元組的高4位裡面,而第2個位元組的低4位全部補0。第2行的前8個點的資料存放在點陣資料的第3個位元組裡面,第2行的後面4個點的資料存放在點陣資料的第4個位元組的高4位裡面,而第4個位元組的低4位全部補0。

然後後面的就以此類推了。這樣我們可以計算 12*12的點陣出存放乙個點陣總共需要32個位元組。

這樣我們可以得出乙個 m*n 的點陣所占用的位元組數為 (m+7)/8*n。

------------第二部分是顯示字型在儲存資料中的定址--------

首先是如何在漢字型檔中定址某個漢字的點陣資料了。要解決這個問題,首先需要了解漢字在計算機中是如何表示的。在計算機中英文可以使用 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 + 位碼) * 乙個點陣字模占用的位元組數

英文使用的就是 ascii碼,其碼值是0到127,定址公式為:

英文點陣資料在英文點陣字型檔中的偏移 = 英文的ascii碼 * 乙個英文本模占用的位元組數。

關於漢字與Ascii碼

gb2312和gbk每乙個漢字由2個位元組組成,這2個位元組的ascii碼大小分別是 gb2312 high8 0xa1 0xfe 161 254 low8 0xa1 0xfe 161 254 gbk high8 0x80 0xfe 128 254 low8 0x40 0xfe 64 254 gb2...

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...

點陣漢字顯示

陣漢字顯示 目錄 dos下的點陣漢字 漢字的內碼 漢字字模 漢字型檔檔案 列印字型檔檔案和hzk12 文件內容 dos下的點陣漢字 你是否碰到過用啟動盤啟動系統後用dir命令得到一串串莫名其妙的字元?有經驗的朋友會告訴你 那是漢字。漢字?你不禁會問 怎麼乙個我乙個也不認識。但那確確實實是漢字,如果你...