GBK點陣顯示字型檔的製作和使用

2022-09-18 11:06:20 字數 2052 閱讀 7728

**:

gbk編碼

共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。

以兩個位元組表示乙個漢字,編碼範圍是0x8140~0xfefe,相容gb2318,並覆蓋了unicode中的所有漢字。win7記事本預設以gbk儲存漢字。

關於gbk的詳細資訊:

開發環境

win7、eclipse、mingw

執行下面這段**,

生成gbk全字元檔案gbk.txt,編碼範圍0x8140~0xfefe

[cpp]view

plain

copy

#include 

#include 

intmain(

void

)    

else

printf("creat file gbk.txt/n"

);  

while

(start 

fclose(fp);  

printf("success!"

);  

return

0;  

}  執行後,用記事本開啟

gbk.txt檔案,可以看到其中的字元。

用「牧碼字模」軟體開啟gbk.txt檔案,選擇字型為宋體,字重為1,點陣大小16*16,對齊方式為左下,取模方式為「縱向取模、高位在下」。輸出格式選擇bin。然後點選輸出,會生成乙個temp.bin檔案,改名為gbk.bin。

gbk.bin檔案就是gbk編碼字元的點陣字型檔檔案,每32個位元組可以繪製乙個字元,例如第乙個字元『丂』的顯示如下:

取模的資料為:

0x02, 0x02, 0x02, 0xc2, 0xb2, 0x8e, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x00, 

gbk.bin檔案中按gbk編碼的大小排列,每32個位元組可以顯示乙個字元,假設乙個字元的gbk編碼為num,那麼它的點陣資料第乙個位元組的位置就是:

(num-0x8140)*32

從這個位元組開始,讀取32個位元組,將其按按照取模方式顯示即可。

例如:用linux的終端模擬點陣螢幕,每個字元位置就是乙個點,程式如下:

[cpp]view

plain

copy

#include 

#include 

#include 

#define start 0x8140

#define datanum 0x20

intdisplaychar(

file

*fp,unsigned 

short

intdispch,

char

fillch,

char

start_x,

char

start_y);  

intmain(

void

)    

/** fp指向點陣字型檔二進位制檔案

* 以點陣方式顯示乙個gbk字元

* dispch是要顯示的字元,fillch是填充點陣的字元

* start_x,start_y是顯示的起始座標

*/int

displaychar(

file

*fp,unsigned 

short

intdispch,

char

fillch,

char

start_x,

char

start_y)  

}  if(x == (start_x+15))  

else

x++;  

}  return

0;  

}  顯示效果如下:

字型檔檔案:

字模提取軟體:

點陣字型檔製作和使用 三

乙個漢字由兩個擴充套件 ascii 碼組成,第乙個擴充套件 ascii 碼用來存放區碼,第二個擴充套件 ascii 碼用來存放位碼.在 gb2312 80 標準中,將所有的漢字分為94個區,每個區有94個位可以存放94個漢字,形成了人們常說的區位碼,這樣總共就有 94 94 8836 個漢字.在點陣...

ASCII字元點陣字型檔的製作和使用

win7,eclipse,mingw ascii編碼的可列印字元是0x20 0x7e,先用執行下面這段 生成乙個包含全部可列印字元的txt檔案 cpp view plain copy include include int main int argc,char argv for i 0x20 i 0...

ASCII字元點陣字型檔的製作和使用

win7,eclipse,mingw ascii編碼的可列印字元是0x20 0x7e,先用執行下面這段 生成乙個包含全部可列印字元的txt檔案 cpp view plain copy include include int main int argc,char argv for i 0x20 i 0...