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点阵显示字库的制作和使用相关推荐
- 52 8x8点阵c语言程序,51单片机8x8点阵显示程序
<51单片机8x8点阵显示程序>由会员分享,可在线阅读,更多相关<51单片机8x8点阵显示程序(3页珍藏版)>请在人人文库网上搜索. 1.include #include#de ...
- 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, ...
- c语言输出字符的utf码,C语言里如何把GBK码转换为UTF8?
C语言里如何把GBK码转换为UTF8? (2013-03-04 19:41:31) 标签: it 一.利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现 ...
- C语言实现utf-8转gbk,并解决中文标点符号问题。(没有使用API)
C语言实现utf-8转gbk,并解决中文标点符号问题.(没有使用API) 背景: 解决方法: 背景: 嵌入式设备从服务器当中获取的数据(HTTP,MQTT,OPC UA等等)一般编码格式都是UTF-8 ...
- 数码相框_在LCD上显示英文字母、汉字的点阵显示(2)
数码相框_在LCD上显示英文字母.汉字的点阵显示 主要内容: 写应用程序,使LCD显示汉字和字符 原理: 在SDRAM内存里划出一块空间为FrameBuffer显存,LCD控制器会从FrameBuff ...
- ASCII字符点阵和汉字库点阵显示
字符编码方式有ASCII,GBK和Unicode等,ASCII编码方式用 1 byte来表示一个字符,ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符.标准ASC ...
- LED点阵显示,有关特殊国别(阿拉伯,希伯来,泰文)字符排版和乱码问题解决
序:最近公司的需求:做一个模拟LED屏的显示控件 中间各种曲折!此文做个记录,本来早就改写完的!各种原因前后隔了两个多月! 文章写的比较详细,熟悉的大佬可以跳过直接看代码! PS:后面有完整的代码 正 ...
- C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt
C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...
- 计算payload长度c语言,C语言0长度数组(可变数组/柔性数组)详解
1 零长度数组概念 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展. 多数情况下, 其应 ...
最新文章
- ​Arm芯片的新革命在缓缓上演
- php编写猜拳游戏,Python中猜拳游戏与猜筛子游戏的实现方法
- 启明云端分享|一款方便、实用的且适用于ESP32/ESP8266的USB-TTL转接板开发工具推荐
- iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理
- 在vb中使用Iphlpapi.dll获取网络信息(上)
- iOS地图之MapKit框架
- linux如何查icsci进程,linux13问
- linux nslookup 解析不到dns_网络工程师之nslookup命令
- 数据结构与算法---常用三大排序算法
- 大学生创新创业大赛案例_大学生创新创业典型案例4
- GitHub图片加载不出来解决方案(超详细图文教程)
- Soul持续发力社交渠道赴港上市,“Soul式社交”凭什么火出圈?
- Windows Server2008下安装JDK
- 服务器 raid配置
- 文字添加横线的h5实现
- Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a09_扩展内存
- Azuki:缔造NFT元宇宙品牌
- python 怎么实现3d 动画_python – 使用matplotlib的3D动画
- bmp180气压传感器工作原理_40张动图看懂各种传感器工作原理
- 2018秋季寒假作业2-记叙在人生路上对我影响最大的三位老师
热门文章
- 入门干货之用DVG打造你的项目主页-Docfx、Vs、Github
- .Net中的AOP系列之《AOP实现类型》
- 中间件和微服务,Docker以及原生云架构的关系
- 如果你也会C#,那不妨了解下F#(1):F# 数据类型
- 程序员求职面试三部曲之三:快速适应新的工作环境
- mysql事务操作_mysql的事务操作
- [转]《吐血整理》系列-顶级程序员工具集
- Asp.net 批量导入Excel用户数据功能加强版
- 【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统
- C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。