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

2019-07-21 07:23发布

 关于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,大过年的,祝各位老师幸福安康!








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 08:39
code就是汉字的GBK嘛啊。
一个汉字的GBK内码占2个字节。
ql,qh,就是取2个字节的低8位,高8位。
正点原子
2楼-- · 2019-07-21 11:37
mat是存放汉字点阵字节的
wangyan915205
3楼-- · 2019-07-21 15:05
 精彩回答 2  元偷偷看……
348fry
4楼-- · 2019-07-21 19:28
回复【3楼】正点原子:
---------------------------------
原子哥,还是不明白。
qh=*code;
ql=*(++code);
这两句代码能把GBK码的高字节和低字节取出来。code是一个指针,*code就是把code指向的值赋给qh,第二句,地址增1后,吧(code+1)指向的值赋给ql。怎么就把高地位区分开来了?
dragon7799
5楼-- · 2019-07-21 23:11
回复【5楼】348fry:
---------------------------------
取两个高低字节就结束了。没有高低位的问题。
长昵称不被占用
6楼-- · 2019-07-22 02:44
348fry 发表于 2015-8-17 10:46
**** 作者被禁止或删除 内容自动屏蔽 ****

看主函数,就是就是fontx[]这里的第一个,第二个值

一周热门 更多>