一个:先上图看到的结果,下面的屏幕截图android在测试的结果“SD卡测试”、、“GPS测试”和其他字符24x24字体进来。

二:

 1)简单介绍

     《信息交换用汉字编码字符集》是由中国国家标准总局1980年公布,1981年5月1日開始实施的一套国家标准。标准号是GB
2312
—1980

GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆。新加坡等地也採用此编码。中国大陆差点儿全部的中文系统和国际化的软件都支持GB 2312。
基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区。每区有94个位。每一个区位上仅仅有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码
把换算成十六进制的区位码加上2020H,就得到国标码国标码加上8080H,就得到经常使用的计算机机内码。1995年又颁布了《汉字编码扩展规范》(GBK)。

GBK与GB
2312—1980国家标准所相应的内码标准兼容,同一时候在字汇一级支持ISO/IEC10646—1和GB 13000—1的所有中、日、韩(CJK)汉字,共计20902字。

   2)收录

GB 2312标准共收录6763个汉字,当中一级汉字3755个,二级汉字3008个。同一时候,GB 2312收录了包含拉丁字母希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符

GB 2312的出现。基本满足了汉字的计算机处理须要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。

对于人名、古汉语等方面出现的罕用字。GB 2312不能处理,这导致了后来GBK及GB
18030汉字字符集的出现。

 3)分区表示

GB 2312中对所收汉字进行了“分区”处理。每区含有94个汉字/符号。

这样的表示方式也称为区位码

01-09区为特殊符号。

16-55区为一级汉字。按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码

举例来说。“啊”字是GB2312之中的第一个汉字。它的区位码就是1601。

   4)字节结构

在使用GB2312的程序中。通常採用EUC储存方法,以便兼容于ASCII。

浏览器编码表上的“GB2312”。通常都是指“EUC-CN”表示法。

每一个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”。第二个字节称为“低位字节”(也称“位字节”)。

“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上 0xA0)。 因为一级汉字从16区起始。汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是
72*94=6768。当中有5个空位是D7FA-D7FE。

比如“啊”字在大多数程序中,会以两个字节。0xB0(第一个字节) 0xA1(第二个字节)储存。区位码=区字节+位字节(与区位码对照:0xB0=0xA0+16,0xA1=0xA0+1)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVuQm94/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="color:rgb(51,51,51); font-family:arial,宋体,sans-serif; font-size:14px; line-height:24px; text-indent:28px">

三:代码实现

当中用到的hkk.h库文件我已经上传的CSDN(http://download.csdn.net/detail/funbox/7650167)上面,实用到的朋友能够下载使用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <linux/android_pmem.h>
#include "hkk24.h" typedef unsigned long U32;
typedef unsigned short U16;
typedef unsigned char U8;
U8* string_def[] = {{" SD卡測试"},{" Camera測试"},
{"音频測试"},{"重力传感器"},
{" LCD測试" },{" GPS測试"},
{"背光測试"},{"触屏測试"},
{"按键測试"},{" OTG測试"},
{"蓝牙測试"},{" WIFI測试"},
{" HDMI測试"},{" NFC測试"},
{"指南针測试"},{"陀螺仪測试"},
};
/*
===============================================================================
Function : PutPixel
功能 :画单个像素(一个点)
入口參数 :U16 x:点的X坐标
U16 y:点的y坐标
U16 c:点的颜色
===============================================================================
*/
void PutPixel(U16 x, U16 y)
{
set_pixel(x, y, 0, 0, 255, 0);
}
/*
===============================================================================
Function : WriteHZ24
功能 :画中文24点阵汉字
入口參数 :U16 x:汉字X坐标
U16 y:汉字Y坐标
U16 c:汉字颜色
U16 bk_c:汉字背景颜色
U32 addr:汉字所在地址
===============================================================================
*/
void WriteHZ24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{
U16 i16, j16, zg;
U32 mask, buf;
U8 const *pZK; pZK = &HZ24KFont[addr]; for(i16=0; i16<24; i16++)
{
buf= pZK[3*i16]<<16 | pZK[3*i16 + 1]<<8 | pZK[3*i16 + 2];
mask = 0x800000;
for(j16=0; j16<24; j16++)
{
if(buf & mask)
{
PutPixel(x+j16,y+i16);
}
else
{
//*addr_ptr = bk_c; //?? ?? ? ? ?? ???? ? ?
}
mask = mask >> 1;
}
}
} /*
===============================================================================
Function : WriteEN24
功能 :画英文24*16点阵汉字
入口參数 :U16 x:汉字X坐标
U16 y:汉字Y坐标
U16 c:汉字颜色
U16 bk_c:汉字背景颜色
U32 addr:英文所在地址
===============================================================================
*/
void WriteEN24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{
U16 i16, j16, zg;
U32 mask, buf;
U8 const *pZK; pZK = &ENG24Font[addr]; for(i16=0; i16<24; i16++)
{
buf= pZK[2*i16]<<8 | pZK[2*i16 + 1];
mask = 0x8000;
for(j16=0; j16<24; j16++)
{
if(buf & mask) {
PutPixel(x+j16,y+i16);
} else {
//*addr_ptr = bk_c;
}
}
mask = mask >> 1;
}
} /*
===============================================================================
Function : Lcd_Put24
功能 :画24点阵的文字
入口參数 :U16 x:文字X坐标
U16 y:文字Y坐标
U16 c:文字颜色
U16 bk_c:文字背景颜色
U8* string:文字内容
===============================================================================
*/
void Lcd_Put24(U16 x, U16 y, U16 c, U16 bk_c, U8* string)
{
U8 i8;
U16 Block, Pos;
U16 nm;
U32 addr;
U8 size;
//printf("Lcd_Put24 string = %s\n",string);
size = strlen(string);
for(i8 = 0;i8 < size;i8++)
{
printf("string[%d]:%x\n",i8,string[i8]);
}
for(i8=0; i8<size; i8++)
{ if(string[i8]==0)
break;
if(string[i8]>128)
{
nm = 0;
Block = string[i8];
Pos = string[++i8];
nm = Block<<8|Pos;
//nm = 0xb0a1;
printf("nm = 0x%x\n",nm);
//addr = (((nm>>8) - 0x0b0 )*94 + ((nm&0x00ff) - 0xa1 )+1410)*72;
addr = (((nm>>8) - 0xa1 )*94 + ((nm&0x00ff) - 0xa1))*72;
WriteHZ24(x+i8*13, y, c, bk_c, addr);
} else {
addr = (2*94+(string[i8]-0x21))*72;
WriteHZ24(x+i8*15, y,c,bk_c,addr);
//addr = (string[i8]-0x20)*48;
//WriteEN24(x+i8*13, y,c,bk_c,addr);
}
}
}
int main(int argc, char ** argv)
{
U8 i8;
gr_init();
draw_line(0,0,300,300);
Lcd_Put24(0,0,0,0,"啊薄病场础怠丁贰浮埂骸尽取摇堋妗稹鳌齄亚忆");
Lcd_Put24(0,50,0,0,"Yayi");
for(i8 = 0;i8 < 8;i8++) {
Lcd_Put24(0,100+i8*50,0,0,string_def[i8*2]);
Lcd_Put24(300,100+i8*50,0,0,string_def[i8*2+1]);
}
exit(EXIT_SUCCESS);
}



版权声明:本文博客原创文章。博客,未经同意,不得转载。

GB2312引进和使用的字体的更多相关文章

  1. shell编程/字库裁剪(2)——编程过程

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7704085.html 作者:窗户 Q ...

  2. Keil5的设置

    目录 编码格式 字体大小 代码颜色 编码格式 有时候用keil打开工程的时候,发现中文注释是乱码的格式,这是因为编码格式方式不对造成的.可以通过设置不同的编码方式来解决. 点击Edit->Con ...

  3. 【STM32H7教程】第53章 STM32H7的LTDC应用之汉字小字库和全字库制作

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章       STM32H7的LTDC应用之汉字小字库 ...

  4. [办公自动化]windows7 仿宋GB2312字体打印不对

    今天同事发现自己的文档中,仿宋GB2312这种字体打印的看着总觉得不对. 他使用的操作系统是windows7,office 是2007. 解决方案: 将windows xp中的c:\windows\f ...

  5. Javascript动态调整文章的行距、字体、颜色,及打印页面和关闭窗口功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 开发常用技巧之css字体编码

    简介: 当我们写css时,通常需要设置字体名称,我们可以直接写中文,这样没错,但是文件编码为GB2312.UTF-8等不匹配将会出现乱码.因此将中文字体名称转为unicode编码来避免出现这些错误. ...

  7. font-family字体总结

    宋体 SimSun黑体 SimHei微软雅黑 Microsoft YaHei微软正黑体 Microsoft JhengHei新宋体 NSimSun新细明体 PMingLiU细明体 MingLiU标楷体 ...

  8. [No000042]CSS 之 平时那些你不敢用的字体

    CSS 之 平时那些你不敢用的字体 网上找找,无非如下一些中规中矩的结果: Windows下建议字体: 字体名称 对应英文 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaH ...

  9. HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)

    工作中遇到的问题,上网看到别人整理的,我就记下来,嘻嘻!!! 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 ...

随机推荐

  1. HTTP 错误 500.19 – Internal Server Error web.config 文件的 system.webServer/httpErrors 节中不允许绝对物理路径“C:\inetpub\custerr”[转]

    给ASP或者ASP.NET等需要配置IIS服务器的过程中,很可能会遇到以下两种错误.尤其是用Win7系统的,配置IIS7.0版本比用XP系统配置IIS5.1版本而言要复杂复杂一些.当同时需要配置ASP ...

  2. linux环境: shell初始化文件, for TCSH, CSH

    TCSHELL, CSHELL 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc 参考: 1.配置你的csh/tcsh,  https://wik ...

  3. Kendo UI开发教程(20): Kendo MVVM 数据绑定(九) Text

    Text绑定可以使用ViewModel来设置DOM元素的文本属性,如果需要设置input,textarea,或select的显示,需要使用value属性. 1 <span data-bind=& ...

  4. Android的StrictMode

    转自:http://blog.csdn.net/tonyfield/article/details/8238251 Android 2.3提供一个称为严苛模式(StrictMode)的调试特性,Goo ...

  5. Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)

    1.当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vie ...

  6. linux下nginx负载均衡部署

    nginx负载均衡部署 Nginx("engine x") 是一个高性能的 HTTP 和 反向代理 server,也是一个 IMAP/POP3/SMTP 代理server. Ngi ...

  7. 【ASP.NET Web API教程】2.3.2 创建域模型

    原文:[ASP.NET Web API教程]2.3.2 创建域模型 Part 2: Creating the Domain Models 第2部分:创建域模型 本文引自:http://www.asp. ...

  8. DAG上的动态规划

    嵌套矩形问题(最长路及其字典序)有n个举行,选出尽量多的矩阵排成一排,使得除了最后一个之外,每一个矩形可以嵌套在下一个矩形内,并且打印 #include <iostream> #inclu ...

  9. 暂停和屏蔽右键网页中的Flash

    如何暂停网页中的Flash?原理很简单,就是屏蔽Flash的消息即可.屏蔽右键也可以通过此方法 直接贴代码吧,加了注释,很容易就能懂了 新建工程,加一个WebBrowser,再加两个按钮.Flash ...

  10. 移动开发中的Scheme跳转说明——Allowing OtherApps to Start Your Activity

    Allowing OtherApps to Start Your Activity 为了开发更多人使用的App,我们总希望我们的App能够提供一种接口被其他App调用.如我们常见的 大众点评  与  ...