c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用
GBK編碼共收錄漢字21003個、符號883個,并提供1894個造字碼位,簡、繁體字融于一庫。以兩個字節表示一個漢字,編碼范圍是0x8140~0xfefe,兼容GB2318,并覆蓋了unicode中的所有漢字。Win7記事本默認以GBK保存漢字。
開發環境
Win7、Eclipse、MinGW
1.生成GBK全字符文件
運行下面這段代碼,生成GBK全字符文件gbk.txt,編碼范圍0x8140~0xfefe。
#include?
#include?
int?main(void)
{
FILE?*fp=0;
char?ch=0;
unsigned?short?int?start=0x8140;
unsigned?char?part1=0;
unsigned?char?part2=0;
fp=fopen("gbk.txt","wb");
if(fp==NULL)
{
perror("Cann't?open?gbk.txt");
return?-1;
}
else
printf("Creat?file?gbk.txt/n");
while(start?
{
part1=start>>8;
part2=start;
fputc(part1,fp);
fputc(part2,fp);
start++;
}
fclose(fp);
printf("success!");
return?0;
}
運行后,用記事本打開gbk.txt文件,可以看到其中的字符。
2.生成字模二進制文件
用“牧碼字模”軟件打開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,
3.使用字庫文件
gbk.bin文件中按GBK編碼的大小排列,每32個字節可以顯示一個字符,假設一個字符的GBK編碼為NUM,那么它的點陣數據第一個字節的位置就是:
(NUM-0x8240)*32
從這個字節開始,讀取32個字節,將其按按照取模方式顯示即可。
例如:用Linux的終端模擬點陣屏幕,每個字符位置就是一個點,程序如下:
#include?
#include?
#include?
#define?START?0x8140
#define?DATANUM?0x20
int?displaychar(FILE?*fp,unsigned?short?int?dispch,char?fillch,char?start_x,char?start_y);
int?main(void)
{
FILE?*?fp=0;
unsigned?short?int?testch?=?0xb0ae;??//漢字'愛‘的gbk碼
fp?=?fopen("gbk.bin","rb");
initscr();
displaychar(fp,testch,'*',0,0);
refresh();
while(1);
endwin();
fclose(fp);
return?0;
}
/*
*?fp指向點陣字庫二進制文件
*?以點陣方式顯示一個GBK字符
*?dispch是要顯示的字符,fillch是填充點陣的字符
*?start_x,start_y是顯示的起始坐標
*/
int?displaychar(FILE?*fp,unsigned?short?int?dispch,char?fillch,char?start_x,char?start_y)
{
char?x=start_x;
char?y=start_y;
unsigned?int?location=(dispch-START)*DATANUM;
int?i=0;
int?j=0;
char?buf=0;
fseek(fp,location,SEEK_SET);
for(i=0;i
{
buf=fgetc(fp);
//顯示一個字節
for(j=0;j<8;j++)
{
move(y+j,x);
if(?buf?&?(0x01<
{
addch(fillch);
}
}
if(x?==?(start_x+15))
{
x=start_x;
y=start_y+8;
}
else
x++;
}
return?0;
}
顯示效果如下:
下載:
總結
以上是生活随笔為你收集整理的c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel如何查重
- 下一篇: c语言判断x的个位数是否为5,用C语言编