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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版