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.
顺序 选择 循环 总结