用51io口模拟串口的有关问题
用51io口模拟串口的问题我想用模拟串口收发汉字和字母,并在串口调试上显示,可是,如何判断收发的是汉字还是
用51io口模拟串口的问题
我想用模拟串口收发汉字和字母,并在串口调试上显示,可是,如何判断收发的是汉字还是字母,如何判断一个汉字的两个字节哪个是首字节哪个是尾字节?
[解决办法]
汉字内码由两个字节组成,这两个字节最高位都是1,引文字母内码由一个字节组成,最高位是0。
写程序时,读到的就是内码。比如“a中”,a的内码是0x61,中内码是0xd6, 0xd0。
比如一个字符串str,你可以如下判断:
while(*str)
{
if(*str & 0x80) // 汉字
{
str++;
// 把后面的字节*str也读出来,就可以组成一个汉字
}
else
{
// 英文字母,读取
}
str++;
}
[解决办法]本来就是处理字符串的,我的理解是你春口收到一串字符串,要把他转成字符显示出来。就是我说的那样转换的,高位为1,但又不是汉字的显示出来就是乱码。很多串口调式终端都是要嘛二进制方式显示,要嘛就是字符显示,如果不是英文也不是汉字,显示出来就是乱码。
[解决办法]如果仅仅是字母和汉字,直接根据字符的编码对应解码就可以了,任何字符编码在解码过程中都不可能出现歧义.
参考
字符编码
如果收发内容包括汉字,字母,和十六进制数字,那么请你自己编写一个通信协议,用以区分那些是字符那些是"数".