大雨 发表于 2025-2-16 23:55:02

KEIL 中文支持 可能存在bug,不能识别汉字“数 ”|已解决

各位大侠:
KEIL 中文支持 可能存在bug,不能识别汉字“数 ”。经串口测试,不能计算汉字“数”的内码,其它汉字还没有发现异常。
用Keil编译,测试多次,均出现如下问题,更换板子,还是如此,不知道是什么原因。但是,用CodeBlock测试,反而正常。
测试函数一:

void printGBK(const char *hanzi) {
      int i;
    unsigned char *p = (unsigned char *)hanzi;
    for (i = 0; i < strlen(hanzi); i++) {
      printf("内码= %X ", p);
    }
    printf("\n");
}

main()
{

const char *hanzi = "数; //
while (1)
      {

printf("GBK编码汉字是\"%s\" 是", hanzi);
    printGBK(hanzi);
}
}
测试函数二:

// 函数用于输出输入字符串中每个汉字的 GBK 内码
void print_gbk_codes(const char *str) {
      int i;
    int len = strlen(str);
    for (i = 0; i < len; ) {
      if ((unsigned char)str < 0x80) {
            // 处理 ASCII 字符(单字节)
            printf("ASCII 字符: %c, 内码: %02X\n", str, (unsigned char)str);
            i++;
      } else {
            // 处理 GBK 汉字(双字节)
            if (i + 1 < len) {
                printf("汉字: %c%c, GBK 内码: %02X %02X\n", str, str, (unsigned char)str, (unsigned char)str);
                i += 2;
            } else {
                // 遇到不完整的 GBK 编码,这里简单提示
                printf("遇到不完整的 GBK 编码,可能输入有误。\n");
                break;
            }
      }
    }
}

测试函数三:

void Get_HzMat(char *color,char *mat,u8 size)

{                  
      unsigned char qh,ql;
      unsigned char i;                                          
      unsigned long foffset;
      u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
      qh=*color;
      ql=*(++color);
                printf("%x%x\r\n",qh,ql);
      if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非 常用汉字
      {                     
            for(i=0;i<csize;i++)*mat++=0x00;//填充满格
            return; //结束访问
      }         
      if(ql<0x7f)ql-=0x40;//注意!
      else ql-=0x41;
      qh-=0x81;   
      
      foffset=((unsigned long)190*qh+ql)*csize;      //得到字库中的字节偏移量                  
      printf("foffset= %lu \r\n",foffset);
      
                                                                                                   
}
主循环中:
Show_Str(30,160,220,16,"数量",MAGENTA ,16,0);






大雨 发表于 2025-2-16 23:56:47

已经换了两款STC32G12K128板子,都是如此

C_wolf 发表于 2025-2-17 00:22:31

<p><img src="data/attachment/forum/202502/17/002228jwflp1bzii20x8i2.png" alt="屏幕截图2025-02-17002207.png" title="屏幕截图 2025-02-17 002207.png" /></p>

wangcong 发表于 2025-2-17 07:47:56

老掉牙的问题了

jwd 发表于 2025-2-17 08:16:41

这个是已知问题,是keil的问题

Ayb_ice 发表于 2025-2-17 08:24:39

这个是KEIL的BUG,玩51的基本都知道

小坤 发表于 2025-2-17 08:50:48

的确是。\xfd 解决

AI-32位8051 发表于 2025-2-17 08:57:46

1:【新提醒】串口发送相关(编译器0xFD问题) - 仿真/编译器/汇编器/头文件 国芯技术交流网站 - AI32位8051交流社区https://www.stcaimcu.com/forum.p ... 1056&highlight=0xfd
2:【新提醒】关于数据手册里对0xFD问题的建议 - 问题反馈:ISP软件/头文件/单片机数据手册规格书等 国芯技术交流网站 - AI32位8051交流社区https://www.stcaimcu.com/forum.p ... 2562&highlight=0xfd
   

大雨 发表于 2025-2-17 10:05:17

C_wolf 发表于 2025-2-17 00:22


不好意思,忘了,已经解决
页: [1]
查看完整版本: KEIL 中文支持 可能存在bug,不能识别汉字“数 ”|已解决