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.

顺序  选择  循环  总结

posted @ 2018-08-15 23:54  kaizenly  阅读(8848)  评论(0编辑  收藏  举报
打赏