硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2244|回复: 3
收起左侧

[emWin] V6-535_STemWin实验_任意大小全字库的生成和使用方法,GB2312编码(裸机) 有个小问题

[复制链接]

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2019-6-18 08:52:09 | 显示全部楼层 |阅读模式
..\V6-535_STemWin实验_任意大小全字库的生成和使用方法,GB2312编码(裸机)\emWin\HanZi\GUI_UC_EncodeNone.c 中,
在模拟器,或者IDE默认char为有符号类型时,会显示不出汉字。原因为以下两个函数的 if((*s) > 0xA0)判断中,当现实汉字时*s为负数。。。
需要强制做无符号类型转换后再判断。

/*********************************************************************
*
*       _GetCharCode
*
* Purpose:
*   Return the UNICODE character code of the current character.
*/
static U16 _GetCharCode(const char GUI_UNI_PTR * s) {
  if((*s) > 0xA0)
  {
    return *(const U16 GUI_UNI_PTR *)s;
  }
  return *(const U8 GUI_UNI_PTR *)s;
}

/*********************************************************************
*
*       _GetCharSize
*
* Purpose:
*   Return the number of bytes of the current character.
*/
static int _GetCharSize(const char GUI_UNI_PTR * s) {
  GUI_USE_PARA(s);
  if((*s) > 0xA0)
  {
    return 2;
  }
  return 1;
}






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107970
QQ
发表于 2019-6-18 09:47:20 | 显示全部楼层
在MDK里面做个简单的测试,char是有符号型
char a =0xA1;

if(a > 0xA0)
{
        a>0xA0               
}
else
{
       a<=0xA0                                       
}

实际测试,会进入a>0xA0,楼主,你测试下,是不是这样,然后再考虑为什么
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2019-6-18 09:57:28 | 显示全部楼层
本帖最后由 ihavedone 于 2019-6-18 10:01 编辑
eric2013 发表于 2019-6-18 09:47
在MDK里面做个简单的测试,char是有符号型
char a =0xA1;

MDK 用 char 定义变量进行比较,可以正确判断是因为 MDK 默认配置是 char 指无符号型。
如果要将 char 配置成默认有符号,需要 option -> c/c++ -> Plain char is signed


所以一般 MDK,IAR 等嵌入式 IDE 都不会有问题,但是在模拟器上,VS 默认是有符号型,就会有问题。
微信图片_20190618095310.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107970
QQ
发表于 2019-6-18 10:05:33 | 显示全部楼层
ihavedone 发表于 2019-6-18 09:57
MDK 用 char 定义变量进行比较,可以正确判断是因为 MDK 默认配置是 char 指无符号型。
如果要将 char  ...

谢谢指出,这个配置的地方我知道,是我把有符号和无符号搞混了。

默认我们所有例子都没有勾选这个地方,也就是无符号数,所以例子是没问题的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-21 04:19 , Processed in 0.182509 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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