QString字符串中雙引號的梗


【1】QString字符串不支持雙引號

最近做項目(本地環境:WIN10 + QT5.9.2 + VS2017)。有個需求,需要實現形如 "key="123456"" 這樣的字符串。

查了很多資料,發現QString是沒法實現願望的。

但是,std::string可以實現字符中雙引號的夙願,只要加反斜杠即可。

於是,有了下面的 Demo示例。

【2】應用實例

代碼如下(備注:比較簡單,僅僅貼cpp文件):

 1 #include <QtWidgets/QApplication>
 2 #include <QDebug>
 3 #include <QString>
 4 #include <QByteArray>
 5 #include <QCryptographicHash>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     QApplication a(argc, argv);
10 
11     QString strQString = "key=4008001234";
12     QByteArray qstrByte = strQString.toUtf8();
13     QString strQStringMd5 = QCryptographicHash::hash(qstrByte, QCryptographicHash::Md5).toHex();
14     qDebug() << "strQStringMd5 :: " << strQStringMd5; // "49b18827db03d50ae206e177391d8b09"
15 
16 #if 0
17     // QT5.4之前的版本,轉換方式:
18     // std::string => QByteArray
19     QByteArray byteArray(stdString.c_str(), stdString.length());
20     // QByteArray => std::string
21     std::string stdString(byteArray.constData(), byteArray.length());
22 
23     // QT5.4之后版本,轉換方式:
24     inline std::string QByteArray::toStdString() const
25     {
26         return std::string(constData(), length());
27     }
28 
29     inline QByteArray QByteArray::fromStdString(const std::string &s)
30     {
31         return QByteArray(s.data(), int(s.size()));
32     }
33 #endif
34     std::string strValue = "key=\"4008001234\"";
35     QByteArray stdByte = QByteArray::fromStdString(strValue);
36     QString strStdMd5 = QCryptographicHash::hash(stdByte, QCryptographicHash::Md5).toHex();
37     qDebug() << "strStdMd5 :: " << strStdMd5; //"f43fa89e23dae10edc6545ebb14aada9"
38     
39     return a.exec();
40 }

總結:QString的確不支持雙引號,但是可以變換思路,為了構建QByteArray類型的參數,我們可以使用std::string實現字符串中雙引號的夢想。

【3】調試結果

有人或許看了上面實例會反問,僅僅從加密得出的字符串不同就可以判定后者是加了雙引號嗎?的確說服力不夠。

從哪里可以確定加密的字符串是加雙引號的呢?正如博客首頁所述:編碼以明志,調試而致遠。

可以看看下面的兩張調試截圖:

(1)QString字符串轉換為QByteArry后的結果

(2)std::string字符串轉換為QByteArray后的結果

相信這樣可以更篤定,且更喜歡調試的魅力。

 

Good Good Study, Day Day Up.

順序  選擇  循環  總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM