欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

用51io口模拟串口的有关问题

更新时间: 2014-01-05 03:14:09 责任编辑: Author_N1

 

用51io口模拟串口的问题
我想用模拟串口收发汉字和字母,并在串口调试上显示,可是,如何判断收发的是汉字还是字母,如何判断一个汉字的两个字节哪个是首字节哪个是尾字节?
--参考方法--
汉字内码由两个字节组成,这两个字节最高位都是1,引文字母内码由一个字节组成,最高位是0。
写程序时,读到的就是内码。比如“a中”,a的内码是0x61,中内码是0xd6, 0xd0。
比如一个字符串str,你可以如下判断:
while(*str)
{
    if(*str & 0x80)   // 汉字
    {
        str++;
        // 把后面的字节*str也读出来,就可以组成一个汉字
    }
    else
    {
        // 英文字母,读取
    }
    
    str++;
}

--参考方法--
引用
可是你如何区分高位是1的十六进制数和汉字的字节呢,他们高位都是1呀

本来就是处理字符串的,我的理解是你春口收到一串字符串,要把他转成字符显示出来。就是我说的那样转换的,高位为1,但又不是汉字的显示出来就是乱码。很多串口调式终端都是要嘛二进制方式显示,要嘛就是字符显示,如果不是英文也不是汉字,显示出来就是乱码。
--参考方法--
引用:
Quote: 引用:

汉字内码由两个字节组成,这两个字节最高位都是1,引文字母内码由一个字节组成,最高位是0。
写程序时,读到的就是内码。比如“a中”,a的内码是0x61,中内码是0xd6, 0xd0。
比如一个字符串str,你可以如下判断:
while(*str)
{
    if(*str & 0x80)   // 汉字
    {
        str++;
        // 把后面的字节*str也读出来,就可以组成一个汉字
    }
    else
    {
        // 英文字母,读取
    }
    
    str++;
}



可是你如何区分高位是1的十六进制数和汉字的字节呢,他们高位都是1呀


如果仅仅是字母和汉字,直接根据字符的编码对应解码就可以了,任何字符编码在解码过程中都不可能出现歧义.
参考
字符编码

如果收发内容包括汉字,字母,和十六进制数字,那么请你自己编写一个通信协议,用以区分那些是字符那些是"数".
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:09
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19858/
本文WWW.DOC100.NET DOC100.NET版权所有。