8

我知道这是一个非常基本的问题,但我是 Qt 的新手,我不知道该怎么做。我正在尝试将 QString 值(如“AA110011”)转换为十六进制。我想获得 0xaa110011。我试过这段代码:

QByteArray b = aString.toUtf8();

for (int i = 0; i < b.length(); i++ )
{
    if ( b[i] >= 65 && b[i] <= 70 )
    {
        b[i] = b[i] - 55;
    }
    else if (b[i] >= 48 && b[i] <= 57)
    {
        b[i] = b[i] - 48;
    }
}

我在 Vairable "[0]" 的内存中获得值 0a 0a 01 01 00 00 01 01,但我不知道如何获得 aa 11 00 11。

你可以帮帮我吗?谢谢。

4

4 回答 4

9

尝试QString::toIntQString::toUIntQString ::toLong等,例如:

const QString str = QLatin1String("AA110011");
bool ok;
const unsigned int parsedValue = str.toUInt(&ok, 16);
if (!ok) {
    //Parsing failed, handle error here
}

qDebug() << parsedValue;

第二个参数是基数,在本例中为 16 表示十六进制。

如果您的字符串适合 unsigned long long 或更短的字符串,则此解决方案将起作用 - 如果您想以这种方式转换任意长的字符串,它将不起作用。

于 2013-07-15T12:27:05.490 回答
3
 QString prgName = query.value(1).toString();
 prgName.toLatin1().toHex();
于 2018-07-26T12:00:59.087 回答
2

拥有 QString 后,您可以执行以下操作

QString res = string.toAscii().toHex();
qDebug() << res;

参考

于 2013-07-15T11:33:02.363 回答
0

使用QByteArray::fromHex()

QByteArray a = QByteArray::fromHex(s.toLatin1())
qDebug() << a;
于 2020-07-07T10:35:26.317 回答