汉字在字库中的偏移地址计算、显示方法
GB2312收录简化汉字及符号、字母、日文假名等共7445 个图形字符,其中汉字占6763 个。GB2312 规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,即所谓的区码。第二个字节为“低字节”,即所谓的位码。GB2312―80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位0xa1~0xfe,低位也是0xa1~0xfe;汉字从0xb0a1开始,结束于0xf7fe。GB2312将代码表分为94个区,对应第一字节(0xa1~0xfe);每个区94 个位(0xa1~0xfe),对应第二字节。两个字节的值分别为区号值和位号值加32(20H),因此也称为区位码。01~09区为符号、数字区,16~87区为汉字区(0xb0~0xf7),10~15区、88~94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16~55区,按汉语拼音字母/笔形顺序排列:第二级汉字是次常用汉字计3008 个,置于56~87 区,按部首/笔画顺序排列。故而GB2312 最多能表示6763 个汉字。
而GBK内码完全兼容GB2312,同时支持繁体字,总汉字数有2万多个,编码格式如下,每个GBK 码由2 个字节组成,第一个字节为0X81~0XFE,第二个字节分为两部分,一是0X40~0X7E,二是0X80~0XFE。其中与GB2312相同的区域,字完全相同。把第一个字节代表的意义称为区,那么GBK里面总共有126个区(0XFE~0X81+1),每个区内有190 个汉字(0XFE~0X80+0X7E~0X40+2),总共就有126x190=23940 个汉字。点阵库只要按照这个编码规则从0X8140开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数乘以190。这样,就可以得到在这个字库里面定位汉字的方法:
当GBKL<0X7F 时:Hp=((GBKH-0x81)×190+GBKL-0X40)×(sizex2);
当GBKL>0X80 时:Hp=((GBKH-0x81)×190+GBKL-0X41)×(sizex2);
其中GBKH、GBKLL 分别代表GBK 的第一个字节和第二个字节(也就是高位和低位),size 代表汉字字体的大小(比如16 字体,12 字体等),Hp 则为对应汉字点阵数据在字库里面的起始地址。
对于GBK 字库和GB2312 字库,他们的解码部分部分略有不同,这个区别主要是由于他们的编码方式不同引起的,对于GBK 字库,解码的方式如下:
qh=*code;
ql=*(++code);
if(ql<0x7f)
ql -= 0x40;
else
ql -= 0x41;
qh -= 0x81;
foffset = ((unsigned long)190*qh + ql)*(size * 2);
对于GB2312 字库,解码的方式如下:
qh=*code;
ql=*(++code);
ql -= 0xa1;
qh -= 0xa1;
foffset = ((unsigned long)94*qh + ql)*(size * 2);
其中qh、ql 分别代表GBK 的第一个字节和第二个字节(也就是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),foffset 则为对应汉字点阵数据在字库里面的起始地址。
自己取模若干汉字的偏移地址计算
1:定义汉字字模数据结构
2:利用取模软件(如PCtoLCD2002)获取汉字点阵数据
3:编写程序获取汉字点阵输出到LCD显示汉字
Example:
1、16*16汉字字模的数据结构
// ------------16*16汉字字模的数据结构定义 -------------------//
struct typFNT_GB16 // 汉字字模数据结构
{
unsigned char Index[3]; // 汉字内码索引
char Msk[32]; // 16*16的汉字需要的点阵数据为16*16/8=32字节
};
2、16*16汉字点阵信息,注意格式
// 取模软件:PCtoLCD2002
// 汉字库: 取模方式列行式,阴码,点阵16,索引32,取模方向顺向,宽高16
const struct typFNT_GB16 codeGB_16[] = // 数据表
{
"时",
0x00,0x00,0x7C,0x44,0x47,0x44,0x7C,0x45,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20,/*"时",3*/
"间",
0x20,0x13,0x10,0x40,0x47,0x44,0x44,0x47,0x44,0x44,0x47,0x40,0x40,0x40,0x40,0x40,0x00,0xFC,0x04,0x04,0xE4,0x24,0x24,0xE4,0x24,0x24,0xE4,0x04,0x04,0x04,0x14,0x08,/*"间",4*/
"日",
0x00,0x1F,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x00,0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xF0,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x00,0x00,/*"日",5*/
"期",
0x22,0x22,0x7F,0x22,0x3E,0x22,0x3E,0x22,0x22,0xFF,0x00,0x24,0x22,0x43,0x81,0x00,0x00,0x7C,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x7C,0x44,0x84,0x84,0x14,0x08,0x00,/*"期",6*/
"星",
0x00,0x1F,0x10,0x1F,0x10,0x1F,0x01,0x11,0x1F,0x21,0x21,0x4F,0x01,0x01,0x7F,0x00,0x00,0xF8,0x08,0xF8,0x08,0xF8,0x00,0x00,0xFC,0x00,0x00,0xF8,0x00,0x00,0xFE,0x00,/*"星",0*/
"一",
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",1*/
};
2、查找汉字在点阵字库中位置
for (k=0;k<200;k++) //k表示汉字的个数。查找200个汉字
{
if ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1]))
//找到汉字u8 c[2]表示汉字的两字节
{
for(i=0 ; i<32 ; i++)
{
m[i]=codeGB_16[k].Msk[i];//读取这个汉字的32字节点阵数据到//m[32]这个数组中,再根据这个数组中点阵信息显示汉字
}
}
}
汉字在字库中的偏移地址计算、显示方法相关推荐
- ios html gif 显示,iOS中gif图的显示方法示例
iOS中gif图的显示方法示例 发布时间:2020-09-19 06:15:42 来源:脚本之家 阅读:86 作者:蓝光95 一.前言 iOS开发中,大部分时候我们显示一张静态图就可以了,但是有的时候 ...
- 易语言 剪切板 html,易语言中嵌入html直接显示方法
易语言中嵌入html直接显示方法 以前是作者根据经验写的一点关于嵌入HTML语言的方法,大家参考下. 技术渣渣,没有找到更高的方法,现在暂时使用这种方法,将代码本地化然后超文本浏览框调用 写到文件 ( ...
- seaborn中sns.distplot图例显示方法及无法显示的解决办法
在使用python的画图工具包seaborn时,按照网上的教程运行发现distplot中间图例的设置怎么都不显示.在stackoverflow找到解决办法,在此做个简单的笔记. 参考网址 https: ...
- 汉字的内码和区位码与显示汉字原理
汉字的内码和区位码 在计算机中英文字符是用一个字节的ASCII码表示,该字节最高位一般置0或用做奇偶校验,故实际是用7位码来代表128个字符的,但对于众多的汉字,只有用两个字节才能代表,这样用两个字节 ...
- 设置div中的div居中显示
设置div中的div居中显示 方法一. <div class='big'><div class='small'>box1</div></div>styl ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- android 耳机图标显示图标,一种耳机图标的显示方法及终端与流程
本发明涉及通信领域,特别是一种耳机图标的显示方法及终端. 背景技术: 目前的手机耳机类型,主要有三类:不带microphone的三段式耳机:带microphone的欧标耳机(也叫国标):带microp ...
- 用单片机在屏幕上显示字库中的汉字
在屏幕上显示字库中汉字 显示原理 字体模型 1.取模 2.字库 显示函数的实现 1.首先实现点亮一个点 2.以汉字12 * 12,字符6 * 12为例写的驱动函数 3.显示函数(集成到一个函数中) 总 ...
- Java Web项目中HTML文件中的汉字在浏览器中显示乱码的解决方案
今天在做一个Java Web项目的时候,html中的汉字在浏览器中显示为乱码,分析其可能原因有: (1)html文件属性中有默认的编码方式,如果它的设置与html文档中content charset属 ...
- uniapp中uni.showToast最多显示多少个汉字?
在 uni.showToast 中,最多可以显示 14 个汉字.这是由于 uni.showToast 会在屏幕上显示一个浮动的提示框,提示框的大小是有限的,所以最多只能显示 14 个汉字.如果你想在 ...
最新文章
- ATS 4.2.3隐藏服务器名称及版本号的方法
- 组合模型---贝叶斯模型平均
- C语言中()和【】的区别?
- 【AI白身境】深度学习中的数据可视化​​​​​​​
- Hdu1232 畅通工程 【并查集】
- 2.vue 安装教程
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...
- phoneGap2.9+eclipse开发环境和helloword案例
- 如何在CDN边缘节点执行你的JavaScript?
- X权限 gpasswd getent 命令详解
- Android 系统(188)---Android开发:ListView、AdapterView、RecyclerView全面解析
- mysql创建表格1warning_MySQL 复制表
- 如何正确的更换网站服务器?
- codeforce 985C Liebig's Barrels
- IDEA 常用设置 与 常用操作(三)
- Linux:网络测试工具之 iperf3
- 【STM32F429的DSP教程】第1章 初学数字信号处理准备工作
- 【sql: 每天进步一点点】sql 中的 LIKE 用法
- 更换固态硬盘和机械硬盘以及重装系统
- MSCNN论文解读-A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection
热门文章
- 小宇java_小马哥的 Java 项目实战营
- P6039A高压衰减棒使用方法及注意事项
- 交叉火力dsp手机调音软件_汽车DSP手机调音软件下载
- win10 安装SQL Server 2005--以及---安装SQL2005之后卸载,重新安装时提示“安装默认报表服务器的必备组件检查失败”的方法
- 用java写一个双色球的彩票程序(源码)
- js输入汉字转拼音简码和五笔简码
- Linux访问交换机FTP,华为交换机使用FTP查看下载文件
- mysql外键必须连接主键_MySQL数据库的主键和外键详解3
- SQL在线练习 工具
- ajax上传文件时显示进度