关于Keil软件中0xFD问题的说明

众所周知,Keil软件的805180251编译器的所有版本都有一个叫做0xFD的问题,主要表现在字符串中不能含有带0xFD编码的汉字,否则Keil软件在编译时会跳过0xFD而出现乱码。

关于这个问题,Keil官方的回应是:0xfd0xfe0xff3个字符编码被Keil编译器内部使用,所以代码中若包含有0xfd的字符串时,0xfd会被编译器自动跳过。

Keil官方提供的解决方法:在带有0xfd编码的汉字后增加一个0xfd即可。例如:

printf("数学");              //Keil编译后打印会显示乱码

printf("\xfd学");            //显示正常

这里的“\xfd”是标准C代码中的转义字符,“\x”表示其后的1~2个字符为16进制数。“\xfd”表示将16进制数0xfd插入到字符串中。

由于“数”的汉字编码是0xCAFDKeil在编译时会将FD跳过,而只将CA编译到目标文件中,后面通过转义字符手动再补一个0xfd到目标文件中,就形成完整的0xCAFD,从而可正常显示。

关于0xFD的补丁网上有很多,基本只对旧版本的Keil软件有效。打补丁的方法均是在可执行文件中查找关键代码[80 FB FD],并修改为[80 FB FF],这种修改方法查找的关键代码过于简单,很容易修改到其它无关的地方,导致编译出来的目标文件运行时出现莫名其妙的问题。所以,代码中的字符串有包含如下的汉字时,建议使用Keil官方提供的解决方法进行解决

GB2312中,包含0xfd编码的汉字如下:

褒饼昌除待谍洱俘庚过糊积箭烬君魁

例笼慢谬凝琵讫驱三升数她听妄锡淆

旋妖引育札正铸  佚冽邶埤荦蔟摭啐

帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞

瘕颀螨簖酏觚鳊鼾

 

另外,Keil项目路径名的字符中也不能含有带0xFD编码的汉字,否则Keil软件会无法正确编译此项目。

首页    常见问题    关于Keil软件中0xFD问题的说明