以“\”开头并后面加上数字'\ 234'的字符是什么意思?

时间:2016-05-24 07:20:49

标签: c char escaping

当我遇到这些字符时,我一直在查看应用程序的来源,例如'\233', '\234', '\235',当我打印它们时,我会看到垃圾字符。

4 个答案:

答案 0 :(得分:5)

\233是八进制代码为233的字符。

小数点是2×8 2 + 3×8 + 3 = 155

含义取决于所使用的字符集。超过127的代码未在7位ASCII中定义。

正如DevSolar所宣传的那样:
http://rootdirectory.de/chrome/site/encoding.html可能会有所帮助

答案 1 :(得分:4)

它们是八进制转义序列,用于表示字符常量或字符串文字中的特定字节值。

C11,6.4.4.4字符常量

character-constant:
    ' c-char-sequence '
    L' c-char-sequence '
    u' c-char-sequence '
    U' c-char-sequence '

c-char-sequence:
    c-char
    c-char-sequence c-char

c-char:
    any member of the source character set except the single-quote ', backslash \, or new-line character
    escape-sequence

escape-sequence:
    simple-escape-sequence
    octal-escape-sequence
    hexadecimal-escape-sequence
    universal-character-name

octal-escape-sequence:
    \ octal-digit
    \ octal-digit octal-digit
    \ octal-digit octal-digit octal-digit

八进制转义序列定义为反斜杠后跟一到三个八进制数字(0-7)。

为避免将后续十进制数字解释为八进制序列的一部分,通常的做法是使用前导零填充八进制转义序列。但是,与八进制整数常量相反,前导零是不需要

请注意,此类转义序列的语义含义取决于上下文。我可以写"Fu\303\237",这可能意味着"Fuß" (在UTF-8中)或"Fuß"(在CP-1252中),取决于我假设字符串是什么编码。我可以做什么,便携,是写< em>直接在源中的那些,因为不在源字符集中的任何字符的解释(即,没有美元,符号和反引号的ASCII-7)是实现定义的。虽然今天的大多数编译器都可以将字符串文字解释为UTF-8,但是八进制转义序列是可移植的方式。

FWIW,还有十六进制转义序列;然而,它们并没有明确定义:它们贪婪地吞噬了许多&#34;十六进制数字&#34;因为他们可以获得,甚至超出char可以容纳的范围;因此,如果字符串文字中的下一个字符是[0-9a-fA-F]之一,则您无法终止&#34;之前的十字转义(1);这就是为什么八进制序列被一些人所喜欢的原因。

(1):正如M.M指出的那样,你可以将你的字符串文字分成两部分("\xAB" "CD")。

至于可以代表的各种字符值,在哪种编码中,我推荐一个好的代码表This one我掀起了自己,因为我找不到任何现有的信息,列出了我需要的所有信息。

答案 2 :(得分:3)

对于八进制值,这是一个转义序列。语法为\nnn

您可以在 here中阅读有关转义序列的更多信息。

打印垃圾,因为八进制中的233是十进制的155,234是156,235是157.它们不代表任何ascii字符。

答案 3 :(得分:3)

该表示法是八进制转义序列,它表示char文字(char常量)的octal number representation

引用C11,章节§6.4.4.4,字符常量

  

单引号',双引号",问号?,反斜杠\和   任意整数值可根据以下表格表示   序列:

     
      
  • ...
  •   
  • 八进制字符\octal digits
  •   

并且,关于值,

  

八进制转义序列中反斜杠后面的八进制数字被视为其中的一部分   整数字符常量或单个字符构造的单个字符   宽字符常数。八进制整数的数值   formed指定所需字符或宽字符的值。