【问题标题】:Converting QString to Ascii value & Vice Versa in Qt在 Qt 中将 QString 转换为 Ascii 值和反之亦然
【发布时间】:2017-08-19 14:55:12
【问题描述】:

我有一个 QString StrData = "abcd",我想获得该字符串的十六进制值 Ascii,反之亦然。

例如来自"abcd" to "61 62 63 64" 和来自"61 62 63 64" to "abcd"

我设法得到十六进制的 Ascii 值,但不知道如何取回它

Qstring StrData = "abcd";
Qstring HexStrData;
for (int i = 0; i < StrData.length(); i++) {
    HexStrData.append(Qstring::number(StrData.at(i).unicode(), 16));
    HexStrData.append(" ");
}

【问题讨论】:

    标签: c++ qt qt5 qstring


    【解决方案1】:

    要进行第一次转换,您可以使用以下方法:

    QString StrData = "abcd";
    qDebug()<<"before "<< StrData;
    QStringList numberString;
    for(const auto character: StrData){
        numberString << QString::number(character.unicode(), 16);
    }
    QString HexStrData= numberString.join(" ");
    
    qDebug()<<HexStrData;
    

    第二种情况要简单得多,如下所示:

    QString str = QByteArray::fromHex(HexStrData.remove(" ").toLocal8Bit());
    qDebug()<<str;
    

    输出:

    before  "abcd"
    "61 62 63 64"
    "abcd"
    

    【讨论】:

    • 由于问题特别提到了 ASCII 编码,在这种情况下,QString::toLatin1()QString::toLocal8Bit() 更有意义。
    【解决方案2】:

    例子

    QString hex("0123456789ABCDEF");
    QString strStr("abcd");
    QString hexStr;
    for (int ii(0); ii < strStr.length(); ii++)
    {
        hexStr.append(hex.at(strStr.at(ii).toLatin1() >> 4));
        hexStr.append(hex.at(strStr.at(ii).toLatin1() & 0x0F));
    }
    qDebug() << hexStr;
    QByteArray oldStr = QByteArray::fromHex(hexStr.toLocal8Bit());
    qDebug() << oldStr.data();
    

    演出:

    "61626364"
    abcd
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-01
      • 2018-05-18
      • 2011-11-15
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多