这个汉字字库的思路是,从输入的国际标准utf8格式汉字转换为utf16格式,再由utf16和gbk对照表中获取需要的的汉字的点阵字库的起始地址。
为什么需要转换为gbk格式,是因为常用的汉字只有3000多个,而如果使用utf16或者utf8格式来获取中文字库会多出了很多不需要的生僻文字,浪费资源,所以采用输入一个汉字的utf8格式最终转换为gbk格式,通过gbk格式简单计算获取该汉字在字库中的位置。
utf16和gbk的对照表bin文件可以到这里下载,https://download.csdn.net/download/oushaojun2/10323158。
以及测试时候需要查看输入是不是对的,可以看下https://blog.csdn.net/xiaolin_huang/article/details/8557608这个数组的utf16和gbk的对照表。
https://download.csdn.net/download/yuyuqifei/3816652国标一级字库和二级字库汉字
用到的点阵字库取模软件是PCtoLCD2002,这个是用来获取汉字点阵字库的
先设置自己需要的文字字体和大小,
然后电子字模选项设置好之后导入汉字txt文件
最后点击开始生成就可以生成需要的汉字点阵字库
有了汉字点阵字库和utf16和gbk格式的对照表之后,可以参考这篇文章https://juejin.im/post/5ace27c96fb9a028dc416195,utf8如何转换为utf16。
我的代码是temp存放utf16(两个字节),str为utf8(三个字节)。
这里需要提醒一下,utf8格式的字不止有三个字节,1个字节的为ascii,两个字节的为附加符号的拉丁文,希腊文之类的,大于三个字节的为中日韩超大字符集里面的汉字,而三个字节的为国标一级+二级汉字,所以只显示汉字的话只需要utf8,三个字节的格式,以及测试的时候需要看下自己测试文件是否为utf8格式,如果是gbk格式的文件或者utf16格式的文件,那么软件用来存放汉字的数组,也会取得对应格式的数值,而不是utf8格式。
获得utf16格式之后就是从utf16和gbk的对照表中获取对应的gbk格式了。这里用到的是二半查找法,测试环境为ubuntu。
获取gbk编码之后就可以通过计算来获取其在对应的汉字字库的位置了。至于gbk怎么获取在字库中的位置,可以参考https://blog.twofei.com/embedded/hzk.html,因为这里只需要国标一级字库的汉字,所以这里稍微修改了一点字库的查找方式
区号我减去的0xb0,国标一级加二级字库的第一个汉字是“啊”,0xb0a1,获取汉字的在bin文件的起始地址之后就可以根据自己字库的汉字的大小读出所需的字节数就可以显示了。