举例说明
ByteArray {0x01,0x02,0x03,0x04,0x05,0x06};
HexString "01 02 03 04 05 06"
代码
Convert.cpp
#include "convert.h"
#include <QString>
#include <QMessageBox>
#include <QDebug>
Convert::Convert()
{
}
QString Convert::ByteArrayToHexString(QByteArray data)
{
QString ret(data.toHex().toUpper());
int len = ret.length()/2;
for(int i=1;i<=len;i++)
{
ret.insert(2*i+i-1," ");
}
return ret;
}
QByteArray Convert::HexStringToByteArray(QString HexString)
{
bool ok;
QByteArray ret;
HexString = HexString.trimmed();
HexString = HexString.simplified();
QStringList sl = HexString.split(" ");
foreach (QString s, sl) {
if(!s.isEmpty())
{
char c = s.toInt(&ok,16)&0xFF;
if(ok){
ret.append(c);
}else{
ret.clear();
//ret = NULL;
qDebug()<<"非法的16进制字符:"<<s;
return ret;
// QMessageBox::warning(0,tr("错误:"),QString("非法的16进制字符: \"%1\"").arg(s));
}
}
}
// qDebug()<<ret;
return ret;
}
Convert.h
#ifndef CONVERT_H
#define CONVERT_H
#include <QString>
class Convert
{
public:
Convert();
static QString ByteArrayToHexString(QByteArray data);
static QByteArray HexStringToByteArray(QString HexString);
};
#endif // CONVERT_H
调用
void MainWindow::ReadData()
{
static int reNum = 0;
QByteArray buf;
QString myStrTemp;
buf = serialPort->readAll();
if (!buf.isEmpty())
{
if (ui->radio_recv_hex->isChecked())
{
myStrTemp = Convert::ByteArrayToHexString(buf);
}
else
{
myStrTemp=QString::fromLocal8Bit(buf); //支持中文显示
}
reNum += buf.size();
QString str = ui->tex_recv_text->toPlainText();
str +=myStrTemp;
ui->tex_recv_text->clear();
ui->tex_recv_text->appendPlainText(str);
}
buf.clear();
}
void MainWindow::on_btn_send_message_clicked()
{
QByteArray buff;
if (!serialPort->isOpen())
{
QMessageBox::critical(this, tr("Error"), u8"串口未打开");
return ;
}
if (ui->radio_send_hex->isChecked())
{
buff = Convert::HexStringToByteArray(ui->tex_send_text->toPlainText());
if (buff.isNull())
{
QMessageBox::critical(this, tr("Error"), u8"输入格式有误");
return;
}
serialPort->write(buff);
}
else {
serialPort->write(ui->tex_send_text->toPlainText().toLocal8Bit());
}
}
如果这篇文章对您很有帮助,不妨
----- 本文结束 ❤ 感谢您的阅读 ----
下一篇
C# 多线程操作
- 本文作者: Memory
- 本文链接: https://www.mzpkz.top/post/9vjghanlg/
- 版权声明: 本博客所有文章除特别声明外,转载请注明出处!