QT 串口接收的16进制数据转float

该博客介绍了如何使用QT通过QByteArray接收串口的16进制数据,并将其转换为float类型。首先忽略表头信息,然后使用QDataStream从字节数组中读取数据,通过union将字节序列转换为float值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接收的数据采用QByteArray接收:

QByteArray bytearray = ba;                    ba是读取到的数据如(08 01 15 C3 C8 71 40 5A)其中08 01 15是表头信息,C3 C8 71 40是需要的数据,最后一位不管

QDataStream out(&bytearray,QIODevice::ReadWrite);    //将字节数组读入
qint8 outChar = 0;
QString str;
QString strinfo;
out >> outChar;
out >> outChar;
out >> outChar;
str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));        //判断是否是需要的数据
if( str != "15" )

Qt中,你可以使用QSerialPort模块来操作串口通信。首先,确保已经添加了对QSerialPort的支持。以下是一个简单的例子,展示了如何创建一个函数,将浮点数换为十六进制字符串并通过串口发送: ```cpp #include <QObject> #include <QSerialPort> #include <QStringList> class SerialPortHandler : public QObject { Q_OBJECT public slots: void sendFloatAsHex(float value) { // 创建一个QSerialPort对象实例 QSerialPort serial("COM1", 9600); // 替换"COM1"为实际串口号 if (!serial.isOpen()) { qDebug() << "Failed to open the serial port."; return; } // 换浮点数为十六进制字符串 QString hexValue = QByteArray::number(value * 10000, 16).toUpper(); // 因为通常浮点数要乘以一个较大的基数才能完全表示,这里乘以10000举例 // 发送数据 qint64 bytesSent = serial.write(hexValue.toUtf8()); if (bytesSent > 0) { qDebug() << "Sent: " + hexValue + " (" << bytesSent << " bytes)"; } else { qDebug() << "Failed to send data."; } } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 实例化SerialPortHandler,并连接到信号槽 SerialPortHandler handler; QObject::connect(&handler, &SerialPortHandler::sendFloatAsHex, [] (float value) { /* 如果需要处理其他操作,可以在这里编写 */ }); return app.exec(); } ``` 在这个示例中,`sendFloatAsHex()`函数接收一个`float`值,将其换为十六进制字符串,然后尝试通过指定的串口发送。请注意,你需要替换"COM1"为你的实际串口设备名称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值