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个字节可以绘制一个字符,例如第一个字符‘丂’的显示如下:

0818b9ca8b590ca3270a3433284dd417.png

取模的数据为:

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;

}

显示效果如下:

0818b9ca8b590ca3270a3433284dd417.png

下载:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云服务器下行_腾讯云轻量应用服务器简单测评

这台机器的配置是1核心1G内存3M带宽,一直在吃灰&#xff0c;到现在才想起来应该测评一下腾讯云活动推荐​cloud.tencent.com测评机器概况从图中可以看到这台机器CPU采用 AMD EPYC 7K62 48-Core Processor 主频2.60GhzI/O大致129.3MB/S 用来建站是没问题的。3Mbps上行带宽跑满,下…

这是我见过的最全的训练数据集,没有之一!

从大学毕业起&#xff0c;小编就开始收集各类数据集&#xff0c;经过近几年的积累和沉淀&#xff0c;小编收集整理了32套数据集&#xff0c;内容涵盖“自动驾驶”、“人脸识别”、“世界杯”、“股票数据”、“基因组数据”、“全球各大社交媒体数据”等。现在&#xff0c;小编…

运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

前言上一篇简单介绍了Consul&#xff0c;并使用开发模式&#xff08;dev&#xff09;进行流程演示&#xff0c;但在实际开发中需要考虑Consul的高可用和操作安全性&#xff0c;所以接着来聊聊集群和ACL的相关配置&#xff0c;涉及到的命令会在环境搭建过程中详细介绍。正文关于…

c语言判断x的个位数是否为5,用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出“yes”,否则输出“no”...

#include int main(){int five;printf("输入一个整数:");scanf("%d",&five);while(five>10){five five%10;}if(five 5)printf("yes");elseprintf("no");return 0;}扩展资料&#xff1a;“模”是“Mod”的音译&#xff0c;模运…

从基础概念到数学公式,这是一份520页的机器学习笔记(图文并茂)

导读&#xff1a;近日&#xff0c;来自SAP&#xff08;全球第一大商业软件公司&#xff09;的梁劲&#xff08;Jim Liang&#xff09;公开了自己所写的一份 520 页的学习教程&#xff08;英文版&#xff09;&#xff0c;详细、明了地介绍了机器学习中的相关概念、数学知识和各种…

Excel模板导出之动态导出

说明目前Magicodes.IE已支持Excel模板导出时使用JObject、Dictionary和ExpandoObject来进行动态导出&#xff0c;具体使用请看本篇教程。本功能的想法、部分实现初步源于arik的贡献&#xff0c;这里再次感谢arik&#xff01;在开始本篇教程之前&#xff0c;我们重温一下模板导出…

简述原型模型的特点_3D打印硅胶复模手板的步骤和特点有哪些

硅胶手板是一种主要用于手板模制作的硅胶制品&#xff0c;手板硅胶主要要求&#xff1a;不缩水、不变形&#xff0c;硬度合适不太复杂的产品使用。硅胶手板经常用硅胶模具来制造为产品快速成型复制提供便利性&#xff0c;产品收缩率可达到千分之二&#xff0c;主要用于手板模型…

快速成长为数据挖掘高手的秘诀

随着大数据时代的到来&#xff0c;数据挖掘的重要性越发显著。所谓数据挖掘&#xff0c;一般是指从大型数据库中将隐藏的预测信息抽取出来的过程&#xff0c;而更为精确的解释就是“从数据中挖掘知识”。目前而言&#xff0c;数据挖掘大致分为四个层次&#xff1a;纯粹数据加工…

ASP.NET Core 基于角色的 JWT 令牌

原文&#xff1a;https://bit.ly/3vYljq3作者&#xff1a;Rick Strahl翻译&#xff1a;精致码农-王亮声明&#xff1a;我翻译技术文章不是逐句翻译的&#xff0c;而是根据我自己的理解来表述的。其中可能会去除一些本人实在不知道如何组织但又不影响理解的句子。ASP.NET Core 中…

圆形比例分布图怎么做_解读宝山区2035总体规划:建设用地的比例在上海非中心城区中最高...

《上海市宝山区总体规划暨土地利用总体规划(2017-2035)》已经发布&#xff0c;在宝山区2035总体规划中&#xff0c;一个重要的核心指标成为了亮点&#xff0c;这就是宝山区的建设用地面积为244.3平方公里。宝山区的陆地总面积是301.6平方公里&#xff0c;由此宝山区建设用地面积…

Lanchester战争模型:用可分离变量的微分方程占卜战事

看过国产的战争题材电视剧《亮剑》的各位老铁一定熟悉李云龙集结重兵攻打县城的故事。在故事中&#xff0c;李云龙利用人数上的优势对平安县城进行了围点打援&#xff0c;最后用二营长的意大利炮消灭了城楼上的鬼子官。但是众所周知&#xff0c;抗日时期中国军队的单兵作战能力…

微软软件安装平台

http://www.microsoft.com/web/downloads/platform.aspx 转载于:https://www.cnblogs.com/kkun/archive/2011/03/09/1978039.html

如何在 C# 中使用 yield

yield关键词是在 C# 2.0 中被引入的&#xff0c;我们都知道实现了 IEnumerable 接口的类都可以用于被 foreach 迭代&#xff0c;这是因为 IEnumerable 接口中提供了一个可迭代的 GetEnumerator() 方法&#xff0c;代码定义如下&#xff1a;public interface IEnumerable{IEnume…

通过听力写代码?盲人程序员就是这样做的

一Michael Forzano&#xff0c;Amazon2018 年 3 月&#xff0c;Amazon 官网「工作在 Amazon」栏目有一篇文章&#xff0c;介绍了他们的一位盲人程序员 Michael Forzano。&#xff08;视频来自&#xff1a;阑夕&#xff09;Amazon 软件工程师 Michael Forzano 出生就因先天疾病而…

android修改电量颜色,android状态栏电池颜色?

鸿蒙传说/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java在Intent.ACTION_BATTERY_CHANGED broadcast处理中调用fireBatteryLevelChanged()方法fireBatteryLevelChanged中会回掉BatteryStateChangeCallbackframewor…

access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...

炒牛肉时&#xff0c;想要牛肉嫩滑又不老&#xff0c;只需加入1样东西&#xff0c;很多人都不懂冬季滋补怎么能少得了牛肉&#xff0c;牛肉中含有非常丰富的营养成分&#xff0c;其中蛋白质的含量尤为丰富还有大量的氨基酸&#xff0c;能够提高身体的抗病能力&#xff0c;特别适…

张亚勤:PC之外的争夺战

文 / 陈振烨 尽管经常有公司抢走微软的风头&#xff0c;但当今世界&#xff0c;微软仍然是当之无愧的IT霸主。过去几个季度&#xff0c;微软各项核心数据非常给力&#xff0c;2011财年第一季度净利润54亿美元&#xff0c;营收162亿美元&#xff1b;而2010财年187.6亿美元的净利…

优化 ASP.NET Core Docker 镜像的大小

在这容器化的世界里&#xff0c;我们已经很少直接通过文件发布来运行asp.net core程序了。现在大多数情况下&#xff0c;我们都会使用docker来运行程序。在使用docker之前&#xff0c;我们往往需要打包我们的应用程序。asp.net core程序的镜像打包&#xff0c;网上有很多教程&a…

监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法

没人会看的开场白&#xff1a;本来觉得自己从数据建模转人工智能方向应该问题不大&#xff08;自我感觉自己算法学的不错&#xff09;。结果一个K-邻近实现手写数字识别的代码就让我改了三四天。虽然网上这方面的代码是很多&#xff0c;但是我运行了好几个&#xff0c;结果都不…

xp怎样安装android-studio,Xposed 框架的安装

借鉴&#xff1a;安装流程&#xff1a;安装 雷电模拟器3.93下载安装xposed框架。xposed 框架在Dalvik 虚拟机和ART虚拟机上的安装不一样(至于ART虚拟机和Dalvik虚拟机的区别&#xff0c;可以参阅 文章)如果Android 版本不小于 5.0&#xff0c;就是ART版本的虚拟机&#xff0c;需…