你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于gb2312字库的问题

[复制链接]
ssssss 提问时间:2018-8-30 13:46 /
本帖最后由 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 Ⅹ Ⅺ Ⅻ  


ffd.png
收藏 评论24 发布时间:2018-8-30 13:46

举报

24个回答
STM1024 回答时间:2018-8-31 10:58:18
本帖最后由 stm1024 于 2018-8-31 11:05 编辑
wwwheihei 发表于 2018-8-31 09:51
我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在b040,能告诉我你的软件的扫描读取模式吗?我 ...

用C#写的
字模定位
  1. FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
  2.             if (l > 0x7f)
  3.                 fs.Seek(((h - 0x81) * 190 + (l - 0x41)) * 32, 0);
  4.             else
  5.                 fs.Seek(((h - 0x81) * 190 + (l - 0x40)) * 32, 0);
  6.             fs.Read(buffer, 0, 32);
复制代码

然后绘图的时候,是从左到右,从上到下扫描填充格子的。但是代码实现上,我是先画的左半部分(0,2,4..等偶数编号字节),然后再画右半部分的(1,3,5...等奇数编号字节)
  1. DrawGrids();
  2.             int n = buffer.Length;//32
  3.             Graphics g=Graphics.FromImage(bmp);

  4.             for(int i=0;i<16;i++)
  5.             {
  6.                 byte lc = buffer[2*i];
  7.                 for(int j=0;j<8;j++)
  8.                 {
  9.                     if ((lc & 0x80) == 0x80)
  10.                         g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + j * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
  11.                     lc <<= 1;
  12.                 }

  13.                 byte rc = buffer[2 * i + 1];
  14.                 for (int j = 0; j < 8; j++)
  15.                 {
  16.                     if ((rc & 0x80) == 0x80)
  17.                         g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + (j+8) * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
  18.                     rc <<= 1;
  19.                 }
  20.             }
  21.             pb_mod.Image = bmp;
复制代码


ssssss 回答时间:2018-8-31 09:51:41
本帖最后由 wwwheihei 于 2018-8-31 10:03 编辑
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...

我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在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,才能正确进行定位。


oo.png
七哥 回答时间:2018-8-30 14:21:39
本帖最后由 toofree 于 2018-8-30 14:25 编辑

你想问什么呢?是想问,HEX文件中第二行的最后一个为什么是F0吗?
如果是的话,那么这个是校验字节,在BIN文件中不会存在。你可以百度一下intel hex文件格式。
傲游截图20180830141833.png

第二行,:开头,10是数长度,0000是地址,00是数据类型,16个00为数据,最后的F0为校验值。校验值是,所有这一行的数据,除了:号之外,加起来的和最低字节为00。对于这一行的话,只有一个10和最后的F0,加起来是100,那么校验值就是XX00 - 10 = F0。

可以自己检验一下第二行,10 + 10 + 一堆00省略 + 81 + FF + 8C + D4 = 300

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

ssssss 回答时间:2018-8-30 13:52:22
本帖最后由 wwwheihei 于 2018-8-30 14:09 编辑

或者说我应该分析bin文件,可能刚用软件转出来的bin是比较纯的字模数据
ffd.png
ssssss 回答时间:2018-8-30 14:24:47
toofree 发表于 2018-8-30 14:21
你想问什么呢?是想问,HEX文件中第二行的最后一个为什么是F0吗?
如果是的话,那么这个是校验字节,在BIN ...

我现在反应过来,应该看刚软件转化出来的bin看上面我贴出来了
七哥 回答时间:2018-8-30 14:28:54
wwwheihei 发表于 2018-8-30 14:24
我现在反应过来,应该看刚软件转化出来的bin看上面我贴出来了

各有各的好处吧,HEX文件中带地址,带校验,数据传输时不容易出错,适合数据传输。
而BIN的数据最简单直接,适合在从内存中取数。
HEX文件,不用的地址,可以不填充。而BIN必须全部填充,中间不能间断。
ssssss 回答时间:2018-8-30 14:29:57
toofree 发表于 2018-8-30 14:28
各有各的好处吧,HEX文件中带地址,带校验,数据传输时不容易出错,适合数据传输。
而BIN的数据最简单直 ...

帮我分析一下这个bin文件字模,第一二行表示什么字
七哥 回答时间:2018-8-30 14:31:41
本帖最后由 toofree 于 2018-8-30 14:34 编辑
wwwheihei 发表于 2018-8-30 14:29
帮我分析一下这个bin文件字模,第一二行表示什么字

BIN第一行没字,全空,漆黑一片。但第二行有数据。不知道你的字分辨率是多少?没有分辨率的话,不知道什么字
ssssss 回答时间:2018-8-30 14:32:11
toofree 发表于 2018-8-30 14:28
各有各的好处吧,HEX文件中带地址,带校验,数据传输时不容易出错,适合数据传输。
而BIN的数据最简单直 ...

我想知道它前面几行都是哪些字的模
ssssss 回答时间:2018-8-30 14:34:19
toofree 发表于 2018-8-30 14:31
BIN第一行没字,全空,漆黑一片。

不是第二行有81 ff   8c 吗?那后面的数据呢
七哥 回答时间:2018-8-30 14:38:04
wwwheihei 发表于 2018-8-30 14:34
不是第二行有81 ff   8c 吗?那后面的数据呢

自己用软件转一个字,看看不就知道了吗?
不知道你用什么软件,什么分辨率,取模方式,横向、纵向,正数、倒数、纵向按字节,还是按一整行取。
什么都不知道,你这是玩呢吗?

ssssss 回答时间:2018-8-30 14:46:28
toofree 发表于 2018-8-30 14:38
自己用软件转一个字,看看不就知道了吗?
不知道你用什么软件,什么分辨率,取模方式,横向、纵向,正数、 ...

我现在懂了,刚搜到

http://blog.csdn.net/oshan2012/article/details/79070705
STM1024 回答时间:2018-8-30 14:51:02
本帖最后由 stm1024 于 2018-8-30 14:52 编辑

如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:
DZKViewer.rar (413 KB, 下载次数: 9)

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

ssssss 回答时间:2018-8-30 15:00:42
stm1024 发表于 2018-8-30 14:51
如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:

这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb2312的字模库,
STM1024 回答时间:2018-8-30 15:02:34
wwwheihei 发表于 2018-8-30 15:00
这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb231 ...

不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示出来,不信你可以试试修改字模文件。
ssssss 回答时间:2018-8-30 15:06:57
stm1024 发表于 2018-8-30 15:02
不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示 ...

明白了 我得用我的子模库替换里面的子模库是吧?
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版