用QString来分割单片机端发来的数据
时间: 2024-03-13 19:43:50 浏览: 64
QString 的Split使用
好的,你可以使用QString的split()函数来分割单片机端发来的数据。以下是一个示例代码:
```cpp
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 查找可用的串口
QList<QSerialPortInfo> portList = QSerialPortInfo::availablePorts();
if (portList.empty()) {
qDebug() << "没有找到串口";
return a.exec();
}
// 配置串口
QSerialPort serial;
serial.setPortName(portList[0].portName()); // 使用第一个可用的串口
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
// 打开串口
if (!serial.open(QIODevice::ReadOnly)) {
qDebug() << "无法打开串口";
return a.exec();
}
// 读取串口数据
QByteArray data;
while (true) {
if (serial.waitForReadyRead(100)) { // 等待100ms
data += serial.readAll(); // 读取所有可用数据
} else {
if (!data.isEmpty()) { // 处理数据
QString str = QString::fromUtf8(data); // 转换为QString
QStringList list = str.split(","); // 分割数据
if (list.size() == 2) { // 验证数据格式
bool ok1, ok2;
float temp = list[0].toFloat(&ok1);
float humi = list[1].toFloat(&ok2);
if (ok1 && ok2) { // 处理数据
qDebug() << "温度:" << temp << "℃,湿度:" << humi << "%";
}
}
data.clear();
}
}
}
return a.exec();
}
```
这个代码可以将单片机端发来的数据按照逗号分割并转换为浮点数类型的温度和湿度数据。你可以根据需要修改它来适配你的具体应用场景。
阅读全文