【问题标题】:Separating hexadecimal escape sequences in strings分隔字符串中的十六进制转义序列
【发布时间】:2017-11-30 10:46:50
【问题描述】:

可以将像"foo" "\x01" "bar" 这样的字符串常量写为单个字符串文字(同时保持十六进制表示法)吗?对于"foo\x01bar",转义序列似乎被解释为\x01ba,因为我收到警告“十六进制转义序列超出范围”。

【问题讨论】:

    标签: c


    【解决方案1】:

    "foo" "\x01" "bar" 一个字符串字面量。

    C 标准规定十六进制转义序列是可以构成转义序列的最长字符序列。如果没有显式连接(这是解决此问题的常见解决方法),编译器会解析 \x01ba,这显然超出了范围。

    【讨论】:

    • 也许“原子”字符串文字是一个更好的描述。
    • @AugustKarlstrom:不幸的是,十六进制转义序列定义\x之后的任意数量的有效十六进制数字。与此相反,octal-escape-sequence (\001) 运行不超过三个八进制数字(6.4.4.4 字符常量)。所以,不,要么你需要用十六进制表示法“玩花样”,要么你选择八进制(一旦你习惯了它就不会那么坏)。
    【解决方案2】:

    "foo\x01\142ar" 怎么样?这是作弊吗?

    【讨论】:

      【解决方案3】:

      另一种解决方案是简单地将转义字符写成八进制,而不是十六进制

      "foo\1bar"
      

      不要再模棱两可了……

      【讨论】:

      • (如果 "bar" 是数字,则最多使用 3 个八进制数字,例如 \001
      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多