Linux 下GB2312简体中文编码表(字库文件为hzk16,未上传)_1
来源:互联网 发布:mac口红铁锈红图片 编辑:程序博客网 时间:2024/05/19 18:37
1、用编辑器修改如下文本,并另存为GB2312格式,执行
-->
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(void){
unsigned char buf[]="别";
printf("%x %x\n",buf[0],buf[1]);
return 0;
}
输出结果:
b1 f0 //buf[0] 为区码 buf[1]为区内码
对照GB2312简体中文编码表标准:
别字编码标准 B1F0
------------------------------
GB2312简体中文编码表中指出:
GB2312-80 包含了大部分常用的一、二级汉字,和 9 区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中
文字符集,这也是最基本的中文字符集。其编码范围是高位 0xa1-0xfe,低位也是 0xa1-0xfe;汉字从 0xb0a1 开始,结束于 0xf7fe。
共包含 682 个符号(第 01-09 区) 6763 个汉字(第 16-87 区)(以下第 01-09 区为国标符号,第 10-15 区为空区)
分析参考:
---------------------------
code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B1A0 薄 雹 保 堡 饱 宝 抱 报 暴 豹 鲍 爆 杯 碑 悲
B1B0 卑 北 辈 背 贝 钡 倍 狈 备 惫 焙 被 奔 苯 本 笨
B1C0 崩 绷 甭 泵 蹦 迸 逼 鼻 比 鄙 笔 彼 碧 蓖 蔽 毕
B1D0 毙 毖 币 庇 痹 闭 敝 弊 必 辟 壁 臂 避 陛 鞭 边
B1E0 编 贬 扁 便 变 卞 辨 辩 辫 遍 标 彪 膘 表 鳖 憋
B1F0 别 瘪 彬 斌 濒 滨 宾 摈 兵 冰 柄 丙 秉 饼 炳
-----------------------------------------------------------
因此每个区内的字符共有:0xfe-0xa1+1=94
头文件
hzk16 里面根据编码表的顺序存放每个字符的像素数据. 矩阵由16*16表示,
即6行x16个像素, 因为字库里面只表示每个像素是否要显示, 所以只要一位
就可以表示一个像素。因此:一个汉字的大小为:16x16bit, 32字节
---------------------------------------------------------
标准C如何通过偏移量寻得字库头文件中的矩阵:
--->
思路分析:先定位到区,然后计算出该区的偏移量,再在这基础上进行区内偏移
eg:(以别字为例) (buf[0]-0xa1)*94+(buf[1]+0xa1)即为该字的矩阵地址
当前汉字偏移地址=(区-区起始编码)*区内汉字总数+(区内码+区内起始编码)
====>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(void){
unsigned char buf[]="±ò",data[32];
unsigned short tmp=0;
//printf("%x %x\n",buf[0],buf[1]);
int fd,offset;
offset=(buf[0]-0xa1)*94+(buf[1]-0xa1);
fd=open("./hzk16",O_RDONLY);
if(fd<0){
perror("open hzk16");
return 1;
}
lseek(fd,offset*32,SEEK_SET); //偏移到需要打印的汉字位置
read(fd,data,32);
int x,y;
for(y=0;y<16;y++){ //输出汉字矩阵
tmp=(data[y*2])<<8|data[y*2+1]; //0,1;2,3;4,5;...
for(x=15;x>=0;x--){
if(tmp&(1<<x)) //
printf("##");
else
printf(" ");
}
printf("\n");
}
return 0;
}
- Linux 下GB2312简体中文编码表(字库文件为hzk16,未上传)_1
- GB2312简体中文编码表
- GB2312 (简体中文)编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- GB2312简体中文编码表
- 代码质量随想录(一):可读是王道
- VC++实现打印功能相关
- 代码质量随想录(二):必也正名乎
- C++中接口与实现分离的技术
- 代码质量随想录(三):名字好,误会少
- Linux 下GB2312简体中文编码表(字库文件为hzk16,未上传)_1
- 修改xampp中mysql的密码
- 代码质量随想录(四):排版,不只是为了漂亮
- shell 字符串操作小结
- vc 使用ADO连接 sqlserver
- 6410 LED 点灯测试 烧到Nand的0地址
- 代碼質量隨想錄(五)注得多不如注得巧
- Ubuntu11.04无线网络已禁用或设备未就绪
- return