【问题标题】:Append "\" character to QString将“\”字符附加到 QString
【发布时间】:2021-10-26 03:02:02
【问题描述】:

我有一个接收字符串 ex 的函数。 "rn" 我需要将'\' 字符附加到字符串的每个字母以获取"\r\n"。为了附加 '\' 字符,我需要使用额外的 '\' 对其进行转义,但这给了我错误的字符串。

例如:

QString s = "rn";
QString n = QString("\\%1\\%2").arg(s[0]).arg(s[1]);
qDebug() << n.compare("\r\n");

输出 79 而不是 0。我需要第一个字符串与 "\r\n" 相同,但我不确定如何正确附加 '\' 字符。

【问题讨论】:

  • n 是 "\\r\\n" 而不是 "\r\n"
  • 我怎样才能让它只是 \r\n 呢?如果我尝试 QString("\%1\%2) 比较输出是 101
  • \r 是转义字符,它与字符 n 完全不同。我想用一个开关盒
  • 你的问题是矛盾的。 (首先,您的示例显示“前置”而不是“附加”。)如果您将一个字符附加到另一个字符,则会得到两个字符。然而,\r 是一个字符,尽管我们用两个字符来描述它。您的真正目标是哪个,是在"\r\n" 之前还是相同?你应该在你的问题中明确指出哪个是目标,哪个是你失败的尝试。
  • 假设您确实想将字母 r 转换为回车符,Convert string with explicit escape sequence into relative character 是相关的,但您可以做得比添加反斜杠然后转换新制作的转义序列更好。 (也就是整体的策略可以用,但是具体的实现会有所不同。)

标签: c++ qt escaping qstring


【解决方案1】:

您可以为每个'\' 编写"\\",将92 类型转换为字符,或附加'\\'(已经是字符)

这是必要的,因为\ 是类 C 和大多数其他语言中的字符串的escape character,因此会在它的显示方式表示方式之间造成麻烦

为了说服自己是一样的,你可以用其他方式显示/,例如二进制或十六进制

#include <stdio.h>

int main()
{
  printf("%c\n", '\\');
  printf("%04x\n", '\\');  // display hex
  printf("%04x\n", "\\"[0]);
  printf("%04x\n", 92);
  return 0;
}
% g++ test.py && ./a.out
\
005c
005c
005c

【讨论】:

    【解决方案2】:

    你想要的方式不起作用,因为转义序列是由编译器解释的,而不是在运行时。

    非常简单的解决方案是使用生成所需特殊字符的函数:

    char get_special_char(char ch) {
      switch (ch) {
        case 'n':
          return '\n';
        case 'r':
          return '\r';
        default:
         return ch;
      }
    }
    
    QString n = QString("%1%2").arg(get_special_char(s[0]))
                               .arg(get_special_char(s[1]));
    

    如果有很多字符需要转换为特殊符号,可以使用一个数组 char[256] 填充所需的符号:a['n'] -> '\n', a['r'] ->'\r'。小心有符号的 char 类型。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2012-10-04
      • 2012-01-05
      • 2016-07-14
      相关资源
      最近更新 更多