- 打卡等级:偶尔看看I
- 打卡总天数:10
- 最近打卡:2025-03-20 10:41:53
中级会员
- 积分
- 288
|
各位大侠:
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[i + 1], (unsigned char)str, (unsigned char)str[i + 1]);
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);
|
-
串口助手打印输出结果
-
|