您尚未登录,请登录后浏览更多内容! 登录 | 立即注册
 找回密码
 立即注册
查看: 56|回复: 5

数据截取不正确

[复制链接]

7

主题

1

好友

44

积分

Qter1级会员

Rank: 1

Qter豆
46
发表于 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中有一个字节就通知上层应用,当你去响应中断的时候,可能里面也就几个字节。所以你需要去判断你接收的数据已经接收完毕之后再做截取的操作
回复

使用道具 举报

0

主题

1

好友

12

积分

Qter1级会员

Rank: 1

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

使用道具 举报

20

主题

13

好友

1183

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

7

主题

1

好友

44

积分

Qter1级会员

Rank: 1

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

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

使用道具 举报

20

主题

13

好友

1183

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

去看看qdatastream的文档吧
回复

使用道具 举报

7

主题

1

好友

44

积分

Qter1级会员

Rank: 1

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

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

使用道具 举报

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

       
    Archiver|冀ICP备10016221号-2

GMT+8, 2017-1-19 10:18 , Processed in 0.087437 second(s), 24 queries .

© 2001-2011 Powered by Discuz! X2.5. Theme By Yeei!

回顶部