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点阵显示字库的制作和使用相关推荐

  1. 52 8x8点阵c语言程序,51单片机8x8点阵显示程序

    <51单片机8x8点阵显示程序>由会员分享,可在线阅读,更多相关<51单片机8x8点阵显示程序(3页珍藏版)>请在人人文库网上搜索. 1.include #include#de ...

  2. c语言数组判断不及格人数,C语言编程 运用数组求不及格人数

    C语言编程题,求数组89,80,95,84,73,84,91,78,87,94的和以及平均值 #includevoid main(){ int a[10]={89,80,95,84,73,84,91, ...

  3. c语言输出字符的utf码,C语言里如何把GBK码转换为UTF8?

    C语言里如何把GBK码转换为UTF8? (2013-03-04 19:41:31) 标签: it 一.利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现 ...

  4. C语言实现utf-8转gbk,并解决中文标点符号问题。(没有使用API)

    C语言实现utf-8转gbk,并解决中文标点符号问题.(没有使用API) 背景: 解决方法: 背景: 嵌入式设备从服务器当中获取的数据(HTTP,MQTT,OPC UA等等)一般编码格式都是UTF-8 ...

  5. 数码相框_在LCD上显示英文字母、汉字的点阵显示(2)

    数码相框_在LCD上显示英文字母.汉字的点阵显示 主要内容: 写应用程序,使LCD显示汉字和字符 原理: 在SDRAM内存里划出一块空间为FrameBuffer显存,LCD控制器会从FrameBuff ...

  6. ASCII字符点阵和汉字库点阵显示

    字符编码方式有ASCII,GBK和Unicode等,ASCII编码方式用 1 byte来表示一个字符,ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符.标准ASC ...

  7. LED点阵显示,有关特殊国别(阿拉伯,希伯来,泰文)字符排版和乱码问题解决

    序:最近公司的需求:做一个模拟LED屏的显示控件 中间各种曲折!此文做个记录,本来早就改写完的!各种原因前后隔了两个多月! 文章写的比较详细,熟悉的大佬可以跳过直接看代码! PS:后面有完整的代码 正 ...

  8. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  9. 计算payload长度c语言,C语言0长度数组(可变数组/柔性数组)详解

    1 零长度数组概念 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展. 多数情况下, 其应 ...

最新文章

  1. ​Arm芯片的新革命在缓缓上演
  2. php编写猜拳游戏,Python中猜拳游戏与猜筛子游戏的实现方法
  3. 启明云端分享|一款方便、实用的且适用于ESP32/ESP8266的USB-TTL转接板开发工具推荐
  4. iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理
  5. 在vb中使用Iphlpapi.dll获取网络信息(上)
  6. iOS地图之MapKit框架
  7. linux如何查icsci进程,linux13问
  8. linux nslookup 解析不到dns_网络工程师之nslookup命令
  9. 数据结构与算法---常用三大排序算法
  10. 大学生创新创业大赛案例_大学生创新创业典型案例4
  11. GitHub图片加载不出来解决方案(超详细图文教程)
  12. Soul持续发力社交渠道赴港上市,“Soul式社交”凭什么火出圈?
  13. Windows Server2008下安装JDK
  14. 服务器 raid配置
  15. 文字添加横线的h5实现
  16. Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a09_扩展内存
  17. Azuki:缔造NFT元宇宙品牌
  18. python 怎么实现3d 动画_python – 使用matplotlib的3D动画
  19. bmp180气压传感器工作原理_40张动图看懂各种传感器工作原理
  20. 2018秋季寒假作业2-记叙在人生路上对我影响最大的三位老师

热门文章

  1. 入门干货之用DVG打造你的项目主页-Docfx、Vs、Github
  2. .Net中的AOP系列之《AOP实现类型》
  3. 中间件和微服务,Docker以及原生云架构的关系
  4. 如果你也会C#,那不妨了解下F#(1):F# 数据类型
  5. 程序员求职面试三部曲之三:快速适应新的工作环境
  6. mysql事务操作_mysql的事务操作
  7. [转]《吐血整理》系列-顶级程序员工具集
  8. Asp.net 批量导入Excel用户数据功能加强版
  9. 【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统
  10. C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。