本帖最后由 wwwheihei 于 2018-8-30 14:31 编辑
软件做出字库bin文件,我想分析里面的数据但是不知道怎么分析它?我想知道它前面几行都是哪些字的模
以下是搜到的资料,
http://blog.csdn.net/zixiao217/article/details/52856814
GB2312编码范围:A1A1-FEFE,其中汉字的编码范围为B0A1-F7FE,第一字节0xB0-0xF7(对应区号:16-87),第二个字节0xA1-0xFE(对应位号:01-94) GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用。GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。同时,GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 分区表示
GB2312编码对所收录字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。这种表示方式也称为区位码。
01-09区收录除汉字外的682个字符。
10-15区为空白区,没有使用。
16-55区收录3755个一级汉字,按拼音排序。
56-87区收录3008个二级汉字,按部首/笔画排序。
88-94区为空白区,没有使用。
举例来说,“啊”字是GB2312编码中的第一个汉字,它位于16区的01位,所以它的区位码就是1601。 双字节编码
GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。例如最后一个码位是9494,区号和位号分别转换成十六进制是5E5E,0x5E+0xA0=0xFE,所以该码位的GB2312编码是FEFE。 从这里看第一个显示的是空格,但是hex里面最后又个f0,搞不懂 01 0 1 2 3 4 5 6 7 8 9
0 、 。 · ˉ ˇ ¨ 〃 々
1 — ~ ‖ … ‘ ’ “ ” 〔 〕
2 〈 〉 《 》 「 」 『 』 〖 〗
3 【 】 ± × ÷ ∶ ∧ ∨ ∑ ∏
4 ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠ ⌒ ⊙
5 ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯
6 ≤ ≥ ∞ ∵ ∴ ♂ ♀ ° ′ ″
7 ℃ $ ¤ ¢ £ ‰ § № ☆ ★
8 ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※
9 → ← ↑ ↓ 〓 02 0 1 2 3 4 5 6 7 8 9
0 ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ
1 ⅹ ⒈ ⒉ ⒊
2 ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔
3 ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶
4 ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀
5 ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③
6 ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ㈠
7 ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩
8 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ
9 Ⅹ Ⅺ Ⅻ
|
用C#写的
字模定位
然后绘图的时候,是从左到右,从上到下扫描填充格子的。但是代码实现上,我是先画的左半部分(0,2,4..等偶数编号字节),然后再画右半部分的(1,3,5...等奇数编号字节)
我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在b040,能告诉我你的软件的扫描读取模式吗?我想手动画出“啊”字算法如下:
GB2312编码总共分了94个区,编码从0xA1 ~OxFE,每个区又有94个位,编码从0xA1 ~OxFE。比如我们常见的“啊”字,他的编码是B0A1,那么我们就可以根据这个编码来计算出他所在字库的地址。“啊”字的区码为BO,位码位A1,那么他所在的地址为((B0-A1) X 94+(A1- A1))X每个汉字的占用字节数。以12X 12为例,那么汉字“啊”所在的地址为((B0-A1)X94+(A1 - A1))X24= 33840(十六进制表示为0x8430),那么从地址0x8430开始的24个字节就是汉字“啊”的点阵数据。
当选择移除预留选项时,则AA-AFP 区将移除,这时,当区码大于A9时需再减6,才能正确进行定位。
你想问什么呢?是想问,HEX文件中第二行的最后一个为什么是F0吗?
如果是的话,那么这个是校验字节,在BIN文件中不会存在。你可以百度一下intel hex文件格式。
第二行,:开头,10是数长度,0000是地址,00是数据类型,16个00为数据,最后的F0为校验值。校验值是,所有这一行的数据,除了:号之外,加起来的和最低字节为00。对于这一行的话,只有一个10和最后的F0,加起来是100,那么校验值就是XX00 - 10 = F0。
可以自己检验一下第二行,10 + 10 + 一堆00省略 + 81 + FF + 8C + D4 = 300
评分
查看全部评分
或者说我应该分析bin文件,可能刚用软件转出来的bin是比较纯的字模数据
我现在反应过来,应该看刚软件转化出来的bin看上面我贴出来了
各有各的好处吧,HEX文件中带地址,带校验,数据传输时不容易出错,适合数据传输。
而BIN的数据最简单直接,适合在从内存中取数。
HEX文件,不用的地址,可以不填充。而BIN必须全部填充,中间不能间断。
帮我分析一下这个bin文件字模,第一二行表示什么字
BIN第一行没字,全空,漆黑一片。但第二行有数据。不知道你的字分辨率是多少?没有分辨率的话,不知道什么字
我想知道它前面几行都是哪些字的模
不是第二行有81 ff 8c 吗?那后面的数据呢
自己用软件转一个字,看看不就知道了吗?
不知道你用什么软件,什么分辨率,取模方式,横向、纵向,正数、倒数、纵向按字节,还是按一整行取。
什么都不知道,你这是玩呢吗?
我现在懂了,刚搜到
http://blog.csdn.net/oshan2012/article/details/79070705
如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:
你这个bin文件,不知道文字的编码是什么,然后字符大小是多少,你可以试试给你的软件,把bin文件重命名为我压缩包中的DZK文件,看看能否正常显示,如果可以,则表明是16×16的GB2312汉字,其他的就要要你软件生成的设置方式了。
评分
查看全部评分
这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb2312的字模库,
不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示出来,不信你可以试试修改字模文件。
明白了 我得用我的子模库替换里面的子模库是吧?