OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9373|回复: 8

还是Get_HzMat(u8 *code,u8 *mat,u8 size)函数理解问题

[复制链接]

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-1-27 17:57:34 | 显示全部楼层 |阅读模式

 关于Get_HzMat(u8 *code,u8 *mat,u8 size)函数还是有些不解,心里总是不踏实;请指点,谢谢!

void Get_HzMat(u8 *code,u8 *mat,u8 size)
{     
 u8 qh,ql;
 u8 i;      
 u32 foffset;
 qh=*code;  //code是一个指针,*code就是把code指向的值赋给qh
 ql=*(++code);//把*code+1后赋值给ql
 if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非常用汉字,汉字是从0x81区开始的
 {   //汉字点阵库区位码按照编码规则从0X8140开始,如果“ql==0xff||qh==0xff”就说明区位码“越区”了,因为只有127个区     
     for(i=0;i<(size*2);i++)*mat++=0x00;//填充满格,“*”是指针运算符,*mat是取指针变量mat的值,
  //即每循环一次0x00自增1后将结果赋值给*mat,“*mat”是u8类型;“size*2”是“描绘”一个汉字所需的字节数,
     return; //结束访问
 }         
 if(ql<0x7f)ql-=0x40;//注意!
 else ql-=0x41;
 qh-=0x81;  
 foffset=((u32)190*qh+ql)*(size*2);//得到字库中的字节偏移量     

 if(size==16)SPI_Flash_Read(mat,foffset+ftinfo.f16addr,32);//字体是16
 else SPI_Flash_Read(mat,foffset+ftinfo.f12addr,24);  //字体是12
                  


问题:

1,qh,ql应该是分别代表区码和位码;
2,ql=*(++code)代表什么意思?求讲解
3,关键是code什么?我知道是指针,
4,mat用以存放size字体的某个汉字的点阵字节?
5,大过年的,祝各位老师幸福安康!








手艺人要内外兼修。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-1-28 11:30:40 | 显示全部楼层
code就是汉字的GBK嘛啊。
一个汉字的GBK内码占2个字节。
ql,qh,就是取2个字节的低8位,高8位。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-1-28 11:31:08 | 显示全部楼层
mat是存放汉字点阵字节的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2014-1-28 11:40:20 | 显示全部楼层
谢谢!经过昨晚“攻关”,除了cc936.c里的两个convert()转换函数不太清楚之外,其余基本搞清楚了。既然是学习,我就要求自己力求把每个函数的思路和c语言逻辑搞清楚,我觉得,唯如此才能真正学好STM32 。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-8-17 10:46:41 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,还是不明白。
qh=*code;
ql=*(++code);
这两句代码能把GBK码的高字节和低字节取出来。code是一个指针,*code就是把code指向的值赋给qh,第二句,地址增1后,吧(code+1)指向的值赋给ql。怎么就把高地位区分开来了?
回复 支持 反对

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-17 15:04:15 | 显示全部楼层
回复【5楼】348fry:
---------------------------------
取两个高低字节就结束了。没有高低位的问题。
有软件开发经验,从0硬件基础学习STM32开发。
回复 支持 反对

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-11-28 22:18:23 | 显示全部楼层
348fry 发表于 2015-8-17 10:46
**** 作者被禁止或删除 内容自动屏蔽 ****

看主函数,就是就是fontx[]这里的第一个,第二个值
回复 支持 反对

使用道具 举报

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
490
金钱
490
注册时间
2019-12-6
在线时间
153 小时
发表于 2020-11-15 13:29:43 | 显示全部楼层
348fry 发表于 2015-8-17 10:46
**** 作者被禁止或删除 内容自动屏蔽 ****

我的理解是 编译器在编译汉字数组的时候 把它当成GBK码保存在某一个连续空间 比如一个开字  它的GBK码比如是0XD385  那么*code先取出高八位  那么*(++code)必定是这个开字GBK码的低八位 这是我的理解 如果有不对的 欢迎探讨
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-7-20
在线时间
4 小时
发表于 2021-7-25 17:29:18 | 显示全部楼层
正点原子 发表于 2014-1-28 11:30
code就是汉字的GBK嘛啊。
一个汉字的GBK内码占2个字节。
ql,qh,就是取2个字节的低8位,高8位。

为何我code调试出来的是utf8码,而不是gbk内码,我编译环境设置的是gb2312,有出现过这种情况的吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 11:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表