用C语言显示汉字的演示程序
汉字是方块字,宽高相等的汉字库在嵌入式领域有着广泛的应用,且其解析也相对来说是比较简单的。
汉字在汉字库中的索引一般会遵循GB2312/GBK编码规则,GB2312/GBK规定汉字编码由2个字节组成,其中低字节区码,高字节为位码。本文以最常见的UCDOS中16x16的宋体字库HZK16来演示汉字的显示方法,HZK16中汉字的存放基于GB2312编码的顺序,每个汉字的点阵数据占32个字节,每个字节表征8个点的状态,每行从左至右的点的状态分别对应字节从高到低的位值。
下面提供完整的演示程序以供参考,
- #include <stdio.h>
- #define FONT_SIZE (16) /* 字体大小 */
- /*
- 获取汉字在汉字库中的索引位置
- 根据GB2312/GBK编码规则,汉字的低字节hz[0]是区码,高字节hz[1]是位码,汉字库从区位码0xa1a1开始存放汉字
- */
- #define HZ_INDEX(hz) ((hz[0] - 0xa1) * 94 + (hz[1] - 0xa1))
- #define DOTS_BYTES (FONT_SIZE * FONT_SIZE / 8) /* 汉字点阵数据所占的字节数 */
- int main(int argc, char* argv[])
- {
- FILE* hzk;
- unsigned char song[2] = "\xcb\xce"; /* “宋”字的区位码为0xcbce */
- unsigned char dots[DOTS_BYTES];
- unsigned char b;
- int i, j, k;
- /* 打开汉字库hzk16,并从中提取“宋”字的点阵数据 */
- if((hzk = fopen("hzk16", "rb")) == NULL)
- {
- return -1;
- }
- fseek(hzk, HZ_INDEX(song) * DOTS_BYTES, SEEK_SET);
- fread(dots, sizeof(unsigned char), DOTS_BYTES, hzk);
- fclose(hzk);
- /* 用“*”号根据点阵数据显示“宋”字 */
- for(i = 0; i < FONT_SIZE; i++)
- {
- /* 每行共FONT_SIZE / 8个字节 */
- for(j = 0; j < FONT_SIZE / 8; j++)
- {
- b = dots[i * 2 + j];
- /* 从左至右的点分别对应字节从高到低的位值 */
- for(k = 0; k < 8; k++)
- {
- if(b & 0x80)
- printf("%c ", '*');
- else
- printf(" ");
- b <<= 1;
- }
- }
- printf("\n");
- }
- return 0;
- }
程序编译运行后会出现如下的显示效果,
- *
- *
- * * * * * * * * * * * * * *
- * *
- * * *
- *
- * *
- * * * * * * * * * * * * * * *
- * * *
- * * *
- * * * *
- * * * * *
- * * *
- * *
- *
- *
- 挺好的先收藏
用C语言显示汉字的演示程序的更多相关文章
- 在wex5平台grid里面的gridselect下拉不能显示汉字问题
当grid里面有gridSelect组件的时候,gridSelect里面的bind-ref是对应的数据库存入字段(int类型),bind-labelRef是对应的计算字段(视图里面的),而option ...
- ASP.NET MVC为字段设置多语言显示 [转]
这段时间一直在忙.NET的项目,今天就写一下关于.NET的文章吧,也很长时间没写过.NET的啦 在使用ASP.NET MVC3 的时候,使用元数据模式可以非常方便地设置每个 字段(或者说属性)以减少 ...
- 设置centos7语言显示环境
1.查看可选语言显示包 locale -a ............(省略好多) zh_CNzh_CN.gb18030zh_CN.gb2312zh_CN.gbkzh_CN.utf8zh_HKzh_HK ...
- 逆向project第004篇:令计算器程序显示汉字(下)
一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...
- 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)
在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...
- 转 Mac 下自带的中文输入法不显示汉字提示问题
原文 https://blog.csdn.net/moxi_wang/article/details/50721326 当时聊天的时候不知道那个手指头按错了什么键 导致Mac自带的中文输入法不能提示显 ...
- 使用Tslib在触摸屏上显示汉字【转】
转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...
- activiti部署到linux后流程图不显示汉字的问题
linux和windows的字体文件一般是不一样的,默认情况下,linux的java7中一般不支持中文,activiti的动态流程图中的汉字需要java调用汉字的字库,这里需要配置一下java的汉字字 ...
- emwin显示汉字使用vs studio仿真和使用keil编写烧录的不同
我用emwin是在新唐的开发板上练习的,所有我就去官网下了开发板的资料,别的开发板应该也有对应的资料,这些软件网上应该很容易搜得到 然后用GUIBuilder构建一个界面,再用FontArchitec ...
随机推荐
- C# 动态获取代码所在行号
通过System.Diagnostics.StackTrace获取代码所在行号和文件信息 获取行号信息 /// <summary> /// Get line number of code ...
- HTML - SELECT默认选中
除了在option中定义属性selected = "selected",还可以 <select defaultValue='2'> <option value=& ...
- 如何用 LaTeX 撰写博士学位论文?
如何用 LaTeX 撰写博士学位论文? 序 一直觉得有必要写这样一篇文章,因为学位论文从格式上说更像一本书,与文章 的排版不同,不仅多出目录等文章没有的部分,而且一般要设置页眉页脚方便阅 读查找.学校 ...
- ERROR: JDWP Unable to get JNI 1.2 environment的错误解决方法
在用java编程的时候,在debug模式下偶尔会出现下面的错误,jdk1.6.0-rc1: ERROR: JDWP Unable to get JNI 1.2 environment, jvm-> ...
- webservice快速入门-使用wsimport生成ws服务端(二)
上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...
- CSDN日报20170312——《成功人士的七个习惯》
[程序人生]成功人士的七个习惯 作者:liumiaocn 所谓温故而知新.重读往往会带来新的收获,即使没有新的收获,可以带来新的思考也是非常不错.在个人成长的历程中.习惯所扮演的角色不言而喻,Step ...
- CDN技术详解笔记
1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...
- js 的登录验证
$scope.startLogin = function () { console.log('loginTimeHelper:startLogin: ' + getCurrentTime()); ef ...
- Hadoop集群datanode死掉或者secondarynamenode进程消失处理办法
当Hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群. 在坏死的节点上输入如下命令即可: hadoop-daemon.sh start datanod ...
- 国际化的工具类ognl utils
package yycg.util; import java.io.Serializable;import java.text.MessageFormat;import java.util.Array ...