Qt 16进制字符串跟QByteArray互转

本文介绍了一种方法,用于将16进制字符串转换为对应的字节序列,同时也提供了从字节序列转回16进制字符串的实现。这两种转换在处理网络数据或文件数据时非常有用。
/*将16进制字符串转换为对应的字节序列*/
QByteArray MainWindow::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{
                qDebug()<<"非法的16进制字符:"<<s;
                QMessageBox::warning(0,tr("错误:"),QString("非法的16进制字符: \"%1\"").arg(s));
            }
        }
    }
    qDebug()<<ret;
    return ret;
}
QString MainWindow::ByteArrayToHexString(QByteArray data){
    QString ret(data.toHex().toUpper());
    int len = ret.length()/2;
    qDebug()<<len;
    for(int i=1;i<len;i++)
    {
        qDebug()<<i;
        ret.insert(2*i+i-1," ");
    }

    return ret;
}


Qt中,“16进制字符串16进制”实际是将16进制表示的字符串换为对应的数值。以下是几种实现方法: ### 使用`QString::toInt`或`QString::toUInt` 可以使用`QString`类的`toInt`或`toUInt`函数来将16进制字符串换为整数。示例代码如下: ```cpp #include <QString> #include <QDebug> int main() { QString hexStr = "FF"; bool ok; int num = hexStr.toInt(&ok, 16); // 换为有符号整数 if (ok) { qDebug() << "Converted number:" << num; } else { qDebug() << "Conversion failed!"; } QString hexStr2 = "FFFFFFFF"; uint num2 = hexStr2.toUInt(&ok, 16); // 换为无符号整数 if (ok) { qDebug() << "Converted unsigned number:" << num2; } else { qDebug() << "Conversion failed!"; } return 0; } ``` ### 使用`QByteArray`和自定义函数 可以通过自定义函数,将16进制字符串换为`QByteArray`。示例代码如下: ```cpp #include <QString> #include <QByteArray> #include <QDebug> char ConvertHexChar(char ch) { if ((ch >= '0') && (ch <= '9')) return ch - 0x30; else if ((ch >= 'A') && (ch <= 'F')) return ch - 'A' + 10; else if ((ch >= 'a') && (ch <= 'f')) return ch - 'a' + 10; else return (-1); } QByteArray QString2Hex(QString str) { QByteArray senddata; int hexdata, lowhexdata; int hexdatalen = 0; int len = str.length(); senddata.resize(len / 2); char lstr, hstr; for (int i = 0; i < len;) { hstr = str[i].toLatin1(); if (hstr == ' ') { i++; continue; } i++; if (i >= len) break; lstr = str[i].toLatin1(); hexdata = ConvertHexChar(hstr); lowhexdata = ConvertHexChar(lstr); if ((hexdata == 16) || (lowhexdata == 16)) { break; } else { hexdata = hexdata * 16 + lowhexdata; } i++; senddata[hexdatalen] = (char)hexdata; hexdatalen++; } senddata.resize(hexdatalen); return senddata; } int main() { QString hexStr = "11AABBCC"; QByteArray byteArray = QString2Hex(hexStr); qDebug() << "Converted QByteArray:" << byteArray.toHex(); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值