如何在QString中正确拼接反斜杠字符以生成 等目标转义序列
问题核心原因
你当前的代码逻辑与预期结果的偏差来自于对C++转义字符的认知差异:
- C/C++字符串字面量中的
\r、\n是单个控制字符,分别对应ASCII码0x0D(回车)、0x0A(换行),总长度为2字节 - 你现有代码拼接生成的是4个独立字符:反斜杠
\+ 字母r+ 反斜杠\+ 字母n,和目标控制字符序列完全不等价,因此compare返回非0值属于正常结果
正确实现方案
场景1:需要生成和"\r\n"等价的控制字符序列
你需要做字符映射转换,而不是拼接反斜杠:
QString s = "rn"; QString n; for (QChar c : s) { switch(c.toLatin1()) { case 'r': n += '\r'; break; case 'n': n += '\n'; break; case 't': n += '\t'; break; // 按需补充其他需要支持的转义字符映射规则 default: n += c; } } qDebug() << n.compare("\r\n"); // 输出0,符合预期
场景2:确实需要生成带字面反斜杠的字符串(如输出转义文本给第三方程序解析)
Qt中拼接字面反斜杠的写法本身是正确的,单个反斜杠的字符串字面量就是要写"\\"转义:
QString s = "rn"; QString n; for (QChar c : s) { n += '\\'; n += c; } // 此时n内容为4字符的"\r\n",和2字节的控制字符"\r\n"本身就不相等,无需做对比
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

