美文网首页
QT QBytearray和16进制字符串、QString互转、

QT QBytearray和16进制字符串、QString互转、

作者: hao_developer | 来源:发表于2023-02-23 11:28 被阅读0次

1. QString 转换为 Hex ByteArray

void SimSerialPort::convertStringToHex(const QString &str, QByteArray &byteData)
{
    int hexdata,lowhexdata;
    int hexdatalen = 0;
    int len = str.length();
    byteData.resize(len/2);
    char lstr,hstr;
    for(int i=0; i<len; )
    {
        //char lstr,
        hstr=str[i].toLatin1();
        if(hstr == ' ')
        {
            i++;
            continue;
        }
        i++;
        if(i >= len)
            break;
        lstr = str[i].toLatin1();
        hexdata = convertCharToHex(hstr);
        lowhexdata = convertCharToHex(lstr);
        if((hexdata == 16) || (lowhexdata == 16))
            break;
        else
            hexdata = hexdata*16+lowhexdata;
        i++;
        byteData[hexdatalen] = (char)hexdata;
        hexdatalen++;
    }
    byteData.resize(hexdatalen);
}


//-----------
char SimSerialPort::convertCharToHex(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);
}

2. QByteArray转QString字符串

QByteArray bytes("hello world");
QString string = bytes;   // QByteArray转QString方法1

QByteArray bytes("hello world");
QString string;
string.prepend(bytes);// QByteArray转QString方法2

3. QString字符串转QByteArray方法

//Qt5.3.2
QString str("hello");  
QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1 

QString str("hello");  
QByteArray bytes = str.toLatin1();  // QString转QByteArray方法2

4. 16进制字符串QString转换QByteArray

/* 
 * @breif 将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;
}

5. QByteArray 转换为 16进制字符串QString

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;
}

6. QByteArray 转为unsigned char *

QByteArray byteArray;
unsigned char * p = (unsigned char *)byteArray.data();

附注:

16进制字符转QByteArray

   QByteArray array;
    array.resize(2);
//    array[0]=0X00;
//    array[1]=0X04;
    bool ok;
    char byte1=QString("00").toInt(&ok,16);
    char byte2=QString("04").toInt(&ok,16);
    array[0]=byte1;
    array[1]=byte2;

QByteArray 存储字符

QByteArray bytes;  
bytes.resize(5);  
bytes[0] = '1';  
bytes[1] = '2';  
bytes[2] = '3';  
bytes[3] = '\0';  
bytes[4] = 'a';  
cout << bytes << endl; 

char 转16进制QString

char temp;
QString str = QString::number((unsigned char)temp, 16).toUpper().rightJustified(2, QChar('0'));

相关文章

网友评论

      本文标题:QT QBytearray和16进制字符串、QString互转、

      本文链接:https://www.haomeiwen.com/subject/gxgzkdtx.html