请教:linux下Qt读取串口的问题

tuzi1262 2012-09-18 10:37:50
目的是实现 将串口发来的数据保存在一个文件内。目前可正确的接收,但保存起来的文件内却在字符间有很多0.
例如:使用串口调试工具发送5个“Hello”。
在程序中可以正确接收,但保存起来的文件却是“……00 00 06 68 65 6c 6c 6f 21 01 00 00 00 00……06 68 65 6c 6c 6f 21 01 00 00……”这个样子的。。。。
以下是代码:
[code=C/C++][/void Download::readMyCom()
{
qWarning("read!");
qDebug() << "read: "<< myCom->bytesAvailable()<<"bytes";
QByteArray temp = myCom->readAll();
ui->textBrowser->insertPlainText(temp);

QFile file("write2fileName");
//如果打开失败则给出提示并退出函数
if(!file.open(QFile::Append | QIODevice::Text)){
qWarning("fail to open the file!");

return;
}
QDataStream out(&file);
out<<temp<<endl;
file.close();
}
]
...全文
374 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuzi1262 2012-09-24
  • 打赏
  • 举报
回复
谢谢楼上各位!我把程序改成这样啦:

QByteArray temp = myCom->readAll();
ui->textBrowser->insertPlainText(temp);

这两句也放在了if判断后的执行里。
因为发现 每次读完之后 myCom->bytesAvailable()是会清零的 所以之前一直跳不进if的判断里。
于是现在就好啦!
digia_birdman 2012-09-20
  • 打赏
  • 举报
回复
另外你需要确认你发的数据确实只有hello哈,别那边本来就多发了。。。。。
digia_birdman 2012-09-20
  • 打赏
  • 举报
回复
楼主可以一试,但是多半效果和之前一样,只不过那些00什么的变成乱码?

[Quote=引用 7 楼 的回复:]

还是使用你原来的那段代码,就是把temp转成QString然后再写到文件里试试
[/Quote]

另外,怎么都跳不进去if (num >0),肯定是你这个函数myCom->bytesAvailable()返回的是0,你用的是那个开源的qt串口扩展类?看看这个方法的说明呢?
feilinhe 2012-09-19
  • 打赏
  • 举报
回复
还是使用你原来的那段代码,就是把temp转成QString然后再写到文件里试试
tuzi1262 2012-09-19
  • 打赏
  • 举报
回复
我把程序改成了这样:
[code=C/C++][void Download::readMyCom()
{
qWarning("read!");
qDebug() << "read: "<< myCom->bytesAvailable()<<"bytes";
QByteArray temp = myCom->readAll();
ui->textBrowser->insertPlainText(temp);

qint64 num = myCom->bytesAvailable();
if(num > 0)
{
QFile file("write2fileName");
//如果打开失败则给出提示并退出函数
if(!file.open(QFile::Append | QIODevice::Text)){
qWarning("fail to open the file!");

return;
}
QDataStream out(&file);
out<<temp<<endl;
file.close();
}
]
结果怎么都跳不进去那个 if (num >0)的判断。。。。。为咩啊??。。。
digia_birdman 2012-09-18
  • 打赏
  • 举报
回复
hello前面和后面的数据可能是串口的头和尾,其实只有中间的才是发送的数据,想办法把他弄掉看看。或者看看用串口调试助手看看出来的数据和您qt读出来的数据一样不。
tuzi1262 2012-09-18
  • 打赏
  • 举报
回复
是有5个呢,因为我发了5个“hello”,只不过保存下来的数据在这5组数据间有很多的00 00 00 00 ……,没法拿来用。。。
Digia_002 2012-09-18
  • 打赏
  • 举报
回复
“……00 00 06 68 65 6c 6c 6f 21 01 00 00 00 00……06 68 65 6c 6c 6f 21 01 00 00……” 你这里不只一组数据啊,总共应该有5组68 65 6c 6c 6f,你检查看看保存的文件里是不是有5个?
tuzi1262 2012-09-18
  • 打赏
  • 举报
回复
可是在textBrowser中显示出来的就是5个“Hello”呀。。。保存的文件里就变成有好多0了。。费解啊。。。
  • 打赏
  • 举报
回复
readall读出的是串口所有数据,串口有头尾协议。。所以。可能需要自己去剔除哈。。

68 65 6c 6c 6f 这个应该就是hello

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧