GBK字库制作、字模数据读取、使用
2016-06-10 00:45
381 查看
最近因为工作需要,学习了一下GBK相关的知识,关于gbk的介绍请参照http://blog.sina.com.cn/s/blog_49677f890102w51b.html。
本文从三个小方面来讲述一下gbk的学习-gbk字库的制作;从gbk字库中读取某一个汉字的字模数据;利用字模数据打印出汉字
1、gbk字库的制作(感谢战舰)
相关软件下载:http://download.csdn.net/detail/scalerzhangjie/9545477
软件配置如下所示,点击创建后提示输入文件名称,之后就会生产gbk字库文件(大小是766080字节)。
如果嫌麻烦,可以直接到如下网址下载:
http://download.csdn.net/detail/scalerzhangjie/9545480
(字库名称为:GBK.DZK,下文会用到)
2、从gbk字库中读取某一个汉字(苹)的字模数据
代码如下:
运行结果如下:
可知“苹”对应的字模数据是:
0x8, 0x20, 0x8, 0x20,0xff, 0xfe, 0x8, 0x20,0x0, 0x0, 0x7f, 0xfc,0x1, 0x0, 0x11, 0x10,
0x9, 0x10, 0x9, 0x20,0x1, 0x0, 0xff, 0xfe,0x1, 0x0, 0x1, 0x0,0x1, 0x0, 0x1, 0x0。
3、利用字模数据打印出汉字
程序如下:
示例较简单,仅作入门参考。
目前遇到的一个问题,生成的字库在linux下面用不了,fopen打不开,原因待查。
本文从三个小方面来讲述一下gbk的学习-gbk字库的制作;从gbk字库中读取某一个汉字的字模数据;利用字模数据打印出汉字
1、gbk字库的制作(感谢战舰)
相关软件下载:http://download.csdn.net/detail/scalerzhangjie/9545477
软件配置如下所示,点击创建后提示输入文件名称,之后就会生产gbk字库文件(大小是766080字节)。
如果嫌麻烦,可以直接到如下网址下载:
http://download.csdn.net/detail/scalerzhangjie/9545480
(字库名称为:GBK.DZK,下文会用到)
2、从gbk字库中读取某一个汉字(苹)的字模数据
代码如下:
#include <sys/stat.h> #include <stdio.h> #define FILE_NAME "GBK.DZK" #define STR_HZ "苹" int get_gbk_offset(char * hz_code) { unsigned char high = hz_code[0]; unsigned char low = hz_code[1]; printf("high:%x, low:%x\n", high, low); if (low < 0x80) { return ((high-0x81)*190 + (low-0x40))*32; } else { return ((high-0x81)*190 + (low-0x41))*32; } } unsigned char gbk_hz_buf[100000000]; long file_size(const char *file) { int i = 0; int offset = 0; long length = -1; FILE *fp = fopen(file, "rb+"); if (fp == NULL) { return length; } fseek(fp, 0, SEEK_END); length = ftell(fp); rewind(fp); fread(gbk_hz_buf, 1, length, fp); offset = get_gbk_offset(STR_HZ); for (i = 0; i < 32; i++) { printf("0x%x, ", gbk_hz_buf[offset+i]); if ((i+1)%4 == 0) { printf("\n"); } } printf("\n"); fclose(fp); return length; } void main(void) { long size = 0; size = file_size(FILE_NAME); return ; }
运行结果如下:
可知“苹”对应的字模数据是:
0x8, 0x20, 0x8, 0x20,0xff, 0xfe, 0x8, 0x20,0x0, 0x0, 0x7f, 0xfc,0x1, 0x0, 0x11, 0x10,
0x9, 0x10, 0x9, 0x20,0x1, 0x0, 0xff, 0xfe,0x1, 0x0, 0x1, 0x0,0x1, 0x0, 0x1, 0x0。
3、利用字模数据打印出汉字
程序如下:
#include <sys/stat.h> #include <stdio.h> unsigned char Hz_code[] = { 0x8, 0x20, 0x8, 0x20, 0xff, 0xfe, 0x8, 0x20, 0x0, 0x0, 0x7f, 0xfc, 0x1, 0x0, 0x11, 0x10, 0x9, 0x10, 0x9, 0x20, 0x1, 0x0, 0xff, 0xfe, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0 }; #define RIGHT_SHIFT_VAL(x, n) (((x)>>(n)) & 0x01) void prt_one_Hz(void) { int tbl_size = sizeof(Hz_code)/sizeof(char); short int temp_code = 0; int i = 0, j = 0; for (i = 0; i < tbl_size; i+=2) { temp_code = Hz_code[i]<<8 | Hz_code[i+1]; for (j = 16; j > 0; j--) { if (RIGHT_SHIFT_VAL(temp_code, j-1)) { printf("●"); } else { printf("○"); } } printf("\n"); } } void main(void) { prt_one_Hz(); return ; }运行结果如下:
示例较简单,仅作入门参考。
目前遇到的一个问题,生成的字库在linux下面用不了,fopen打不开,原因待查。
相关文章推荐
- 修复mysql数据库
- nodejs中的fiber(纤程)库详解
- 桌面中心(一)创建数据库
- 浅析C语言头文件和库的一些问题
- 桌面中心(三)修改数据库
- 目前流行的JavaScript库的介绍及对比
- MySql表、字段、库的字符集修改及查看方法
- 11个并不被常用但对开发非常有帮助的Python库
- Python标准库与第三方库详解
- Python第三方库的安装方法总结
- 实验九 模板与库使用
- 【转】:C++ 库
- 今天我的ubuntu软件中心坏了,于是长生了一个想法。。。
- SDL一些库的安装
- 工会i哦i哦i
- “3·01”严重暴力恐怖案成功告破
- 一种程序界面文字换肤方法
- iOS .a文件如何上传svn
- linux下一致性网关测试程序qt开发环境搭建
- Cocos2dx新建项目包含路径问题,链接库问题