找回密码
 立即注册
发表于 2016-12-19 16:59:59 | 显示全部楼层 |阅读模式
1Qter豆
void Dialog::on_SerialPort_readyRead()
{    if(true==misOpen)   
{
        QByteArray recvData=mserialport.readAll();            
       mstr=recvData.toHex();
     ui->Tedtreceive->insertPlainText(mstr); //输出按16进制显示     
     mout=mstr.mid(5,4);
       ui->Tedtreceive->insertPlainText(mout);
}}
这是我写的串口数据输出的代码,截取其中四位进行输出,但是截取的结果不对,第一句能输出16位16进制数,截取的输出却不对,请问是为什么??


最佳答案

查看完整内容

首先抛开转换的问题,你能确定你一次就能收到你想要的那么多字节吗?答案是不可能的,串口通信中,默认底层buf中有一个字节就通知上层应用,当你去响应中断的时候,可能里面也就几个字节。所以你需要去判断你接收的数据已经接收完毕之后再做截取的操作
回复

使用道具 举报

发表于 2016-12-19 17:00:00 | 显示全部楼层
首先抛开转换的问题,你能确定你一次就能收到你想要的那么多字节吗?答案是不可能的,串口通信中,默认底层buf中有一个字节就通知上层应用,当你去响应中断的时候,可能里面也就几个字节。所以你需要去判断你接收的数据已经接收完毕之后再做截取的操作
回复

使用道具 举报

发表于 2016-12-20 00:28:18 | 显示全部楼层
二进制和文本不能随便转换的,可以先用QDataStream和QByteArray来处理每一个字节,再输出成文本
回复

使用道具 举报

 楼主| 发表于 2016-12-20 08:44:23 | 显示全部楼层
Joey_Chan 发表于 2016-12-20 00:28
二进制和文本不能随便转换的,可以先用QDataStream和QByteArray来处理每一个字节,再输出成文本 ...

不好意思,我是刚接触QT,能麻烦你说详细点么?
回复

使用道具 举报

发表于 2016-12-20 23:12:17 | 显示全部楼层
lanyueliang805 发表于 2016-12-20 08:44
不好意思,我是刚接触QT,能麻烦你说详细点么?

readall拿到的东西装在qbytearray里面,qdatastream可以将qbytearray里面的内容写进任何一个数据类型里面。

去看看qdatastream的文档吧
回复

使用道具 举报

 楼主| 发表于 2016-12-27 16:16:28 | 显示全部楼层
最后的南斯拉夫 发表于 2016-12-27 15:40
首先抛开转换的问题,你能确定你一次就能收到你想要的那么多字节吗?答案是不可能的,串口通信中,默认底层 ...

是的,就是你说的这个问题,不过现在已经解决了,还是很感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

lanyueliang805

    主题

    帖子

    47

    积分

    Qter1级会员

    Rank: 1

    积分
    47

Qter1级会员

发私信