QT5 串口(com)通信_16进制数发送与接收以及接收数据提取

本文介绍如何在Linux环境下使用C++进行串口通信,重点讲解了十六进制数据与字符型数据的发送与接收方法,并给出了具体的代码实例。

基于博客:http://blog.youkuaiyun.com/qq_27312943/article/details/52900527

大部分是“宗师之路”博主的代码,只不过我是在linux下实现,16进制发送与接收都没有问题


注:上图中的点击发送button,发送的16进制字符串已经在程序里写死了


1发送

QString input = "...";

十六进制的数据发送:

myCom->write(QString2Hex(input));    //send hex data

字符型数据发送:

myCom->write(input.toLatin1());        //send char data


2接收

先定义一个QByteArray:

QByteArray temp = myCom->readAll();

十六进制的数据的接收与显示:

this->ui->textEdit->setText(temp.toHex());

字符型数据的接收与显示:

this->ui->textEdit->setText(temp);


3提取接收到的十六进制数据

参考:https://zhidao.baidu.com/question/343237673.html

QString t0 = QString(temp.toHex()).mid(0,4);

bool ok;

int weight = t0.toInt(&ok, 16);
qDebug() << weight;

this->ui->lineEdit->setText(QString::number(weight));


使其为QString类(比如像“fa”之类的文本),然后QString可以执行toInt()操作,最后只需要把int型灯weight的QString::number(weight)现在再lineEdit中就好了


关于十六进制的转换还可以参考这篇文章:

http://www.cnblogs.com/wjy-lulu/p/6600703.html



### 使用 Qt 进行串口通信发送十六进制数据 对于使用 Qt 实现串口通信以及发送十六进制数据的需求,可以利用 `QSerialPort` 类来完成这一功能。下面是一个简单的例子展示如何配置串口参数并通过它发送特定格式的数据。 #### 配置项目文件(`.pro`) 为了能够正常使用 QSerialPort 模块,在项目的 `.pro` 文件中添加如下内容: ```qmake QT += serialport ``` 这会确保编译器链接必要的库以便于访问串口资源[^1]。 #### 主程序代码实现 接下来是具体的 C++ 代码片段用于创建应用程序窗口并且定义槽函数处理按钮点击事件从而触发向指定端口写入二进制流的操作: ```cpp #include <QCoreApplication> #include "mainwindow.h" #include <QSerialPort> #include <QSerialPortInfo> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), serial(new QSerialPort(this)) { setupUi(this); connect(sendButton, &QPushButton::clicked, this, &MainWindow::onSendButtonClicked); } void MainWindow::setupSerialPort() { foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){ qDebug() << "Name:" << info.portName(); qDebug() << "Description:" << info.description(); qDebug() << "Manufacturer:" << info.manufacturer(); } // 设置串口号、波特率等属性 serial->setPortName("/dev/ttyUSB0"); // 或者其他有效的设备路径 serial->setBaudRate(QSerialPort::Baud9600); // 可选不同的速率 serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); if(serial->open(QIODevice::ReadWrite)){ qDebug()<<"Opened Serial Port"; }else{ qCritical()<<"Failed to open serial port."; } } void MainWindow::onSendButtonClicked() { QByteArray hexString = "AABBCCDD"; // 十六进制字符串表示形式 QByteArray byteArray; for(int i=0; i<hexString.length(); ++i){ bool ok; char ch = static_cast<char>(hexString.mid(i,2).toInt(&ok,16)); if(ok){ byteArray.append(ch); ++i; // 跳过下一个字符因为已经读取两位作为一字节 } } int bytesWritten = serial->write(byteArray); qDebug()<<bytesWritten<<"byte(s) were sent!"; } ``` 上述代码展示了怎样初始化串口设置,并通过解析给定的十六进制字符串转换成字节数组再调用 `serial->write()` 方法将其传输出去的过程[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值