当我遇到这些字符时,我一直在查看应用程序的来源,例如'\233', '\234', '\235'
,当我打印它们时,我会看到垃圾字符。
答案 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
。
打印垃圾,因为八进制中的233是十进制的155,234是156,235是157.它们不代表任何ascii字符。
答案 3 :(得分:3)
该表示法是八进制转义序列,它表示char
文字(char
常量)的octal number representation。
引用C11
,章节§6.4.4.4,字符常量
单引号
'
,双引号"
,问号?
,反斜杠\
和 任意整数值可根据以下表格表示 序列:
- ...
- 八进制字符
\octal digits
并且,关于值,
八进制转义序列中反斜杠后面的八进制数字被视为其中的一部分 整数字符常量或单个字符构造的单个字符 宽字符常数。八进制整数的数值 formed指定所需字符或宽字符的值。