QT 十六进制字符串和十六进制之间互转(ByteArray和HexString)
举例说明
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());
    }

}
如果这篇文章对您很有帮助,不妨
----- 本文结束 ❤ 感谢您的阅读 ----