簡體   English   中英

將十六進制QString轉換為UTF-8 QString

[英]Convert hex QString to UTF-8 QString

在我的項目中,我需要將十六進制的QString(“ c2a774657374”)轉換為UTF-8編碼的QString(“§test”)

我當前的函數(HexToAscii)確實將十六進制轉換為ascii,但未正確編碼:

void HexToInt(QString num_hex, int &num_int)
{
    uint num_uint;
    bool ok;
    num_uint = num_hex.toUInt(&ok,16);
    num_int = (int)num_uint;
}

void HexToAscii(QString &Input)//Input == "c2a774657374"
{
    int inputInt;
    QString tempInput;
    for(int i=0; i<Input.length()/2; i++)
    {
        HexToInt(Input.mid(i*2, 2), inputInt);
        tempInput.append((unsigned char)inputInt);
    }
    Input = tempInput;//Input == "§test"
}

但是,這僅轉換每個字節,並且不遵循UTF-8編碼。 當我希望當前函數的結果為(“ test”)時,結果為(“ test”)

如何編輯HexToAscii函數以轉換為UTF-8編碼的QString?

謝謝你的時間。

要獲取十六進制編碼字符串的解碼副本,可以使用QByteArray :: fromHex()靜態函數。

QByteArray hex = QByteArray::fromHex("c2a774657374");
QString str = QString::fromUtf8(hex);

好吧,在UTF-8上,最多127個字節是單字節。 問題是QString如何處理兩個字節序列。

QString無法分辨出“ c2”是什么,而是繼續分配以等待下一個字節。

您可以通過以下方法解決此問題:檢查返回的十六進制是否大於127(7f),然后在附加到QString之前將其與下一個十六進制連接。

嘗試:

#include <QCoreApplication>
#include <iostream>


void HexToInt(QString num_hex, int &num_int)
{
    uint num_uint;
    bool ok;
    num_uint = num_hex.toUInt(&ok,16);
    num_int = (int)num_uint;
}

QString HexToAscii(QString Input)//Input == "c2a774657374"
{
    int inputInt;
    int twobytesequece;
    QString tempInput;
    for(int i=0; i<Input.length()/2; i++)
    {
        HexToInt(Input.mid(i*2, 2), inputInt);
        if (inputInt <= 0x7f) {
            tempInput.append((unsigned char)inputInt);
        } else {
            i++;
            HexToInt(Input.mid(i*2, 2), twobytesequece);
            inputInt = inputInt << 8 | twobytesequece;
            tempInput.append((unsigned char)inputInt);
        }
    }
    return tempInput;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString test = "c2a774657374";
    test = HexToAscii(test);

    return a.exec();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM