GB2312引进和使用的字体

一个:先上图看到的结果,下面的屏幕截图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" 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);
}

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

时间: 2024-12-28 06:44:48

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

c# 生成下部带文字的二维码

话不多说,直接上代码 public class QrCodeUtil { /*qrcode 使用方法 1.引用[右击]->管理NuGet程序包->搜索'qrcode' ->安装 QrCode.net 2.引入下列命名空间 using Gma.QrCodeNet.Encoding; using Gma.QrCodeNet.Encoding.Windows.Render; using System.Drawing.Imaging; using System.IO; using System.

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

完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章       STM32H7的LTDC应用之汉字小字库和全字库制作 本章教程为大家讲解汉字小字库和全字库的制作方式,实际项目中用到的地方比较多. 53.1 初学者重要提示 53.2 使用MakeDot小软件生成C文件格式小字库方法 53.3 使用MakeDot小软件生成C文件格式全字库方法 53.4 C文件格式汉字使用方法 53.5 汉字显示方法解析 53.6

学习实现bootstrap glyphicons字体

今天给大家分享一个bootstrap学习教程.我使用bootstrap很久了,内置的 glyphicons 图标,足以满足 小型项目的需求.只需要使用一个样式,即可调出图标.虽然感觉很神奇,一直没有分析他是怎么实现的,通过Chrome 开发者工具,定位到 对应的elment 后,得知他是使用的 CSS 伪元素技术. 1 <span class="glyphicons glyphicon-eur"></span> .glyphicons 定义了 所有 glyphi

CSS3的REM设置字体大小

1.使用rem来设置Web页面的字体大小: 2.rem是相对于根元素<html>: 3.rem能等比例适配所有屏幕 4.在根元素<html>中定义了一个基本字体大小为62.5%(也就是10px.设置这个值主要方便计算,如果没有 设置,将是以"16px"为基准 ): 我们来看一个简单的代码实例: html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/} body {font-size: 1.4rem;/*1.4 × 10

CSS 中文字体的英文名称

宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 PMingLiU 细明体 MingLiU 标楷体 DFKai-SB 仿宋 FangSong 楷体 KaiTi 仿宋_GB2312 FangSong_GB2312 楷体_GB2312 KaiTi_GB2312 宋体:SimSuncss中中文字体(font-family)的英文名称 Mac OS的一些: 华文细黑:STHeiti Lig

BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生

Unicode字符编码规范 http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits) 因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符.数字.大小写字母和其他一些符号 . 而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符

文字编码ASCII,GB2312,GBK,GB18030,UNICODE,UCS,UTF的解析

众所周知,一个文字从输入到显示到存储是有一个固定过程的,其过程为:输入码(根据输入法不同而不同)→机内码(根据语言环境不同而不同,不同的系统语言编码也不一样)→字型码(根据不同的字体而不同)→存储码(根据保存的编码类型不同而不同).不同的存储码之间又有什么异同呢? 一.ASCII系列编码 首先来说明ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),这个编码的时代就久远了,是由美国国家标准局(ANSI)制定,目

CSS,font-family,好看常用的中文字体(转载若侵可删)

例1(小米米官网):font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif; 例2(淘宝技术研发中心):font: 12px/1.5 Tahoma,Helvetica,Arial,'宋体',sans-serif; 例3(加网 ):font: 14px/1.5 'Microsoft YaHei',arial,tahoma,\5b8b\4f53,sans-serif;

【JavaScript】轻松更改网页背景与字体的颜色

JavaScript,通过点击按钮更改网页背景与字体的颜色,网页中有N个改变颜色的按钮,点击不同的按钮,网页的字体与背景就会改变成不同的颜色.很简单的JavaScript小程序. 一.基本目标 一打开网页首先提示问候信息"你好" 网页中有N个改变颜色的按钮,其中返回是返回网页的默认颜色,背景是白的,字体是黑的 点击不同的按钮,网页的字体与背景就会改变成不同的颜色. 本来想做出彩虹起色的,但原理完全一样就不多写按钮了. 二.基本思想 关键是对body标签与字体js提供id,使其在js中得