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 @   kaizenly  阅读(8900)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2017-08-15 5.15 以测试取代异常
2017-08-15 6.11 以委托取代继承
2017-08-15 4.7 引入NULL对象
2017-08-15 4.5 以卫语句取代嵌套条件式
2017-08-15 4.4 移除控制标记
2017-08-15 4.3 合并重复的条件执行片段
2017-08-15 4.2 合并条件式
打赏

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示