C 以'\';然后是一个数字,例如'\234';什么意思?
我一直在查看应用程序的源代码,当我遇到这些字符时,例如C 以'\';然后是一个数字,例如'\234';什么意思?,c,char,escaping,C,Char,Escaping,我一直在查看应用程序的源代码,当我遇到这些字符时,例如'\233'、'\234'、'\235',当我打印它们时,会得到垃圾字符 这是一个转义序列,用于八进制值。语法是\nnn 您可以在中阅读有关转义序列的更多信息 垃圾被打印出来,因为八进制中的233是十进制中的155,234是156,235是157。它们不表示任何ascii字符。该符号是八进制转义序列,表示char文字(char常量) 引用C11,第§6.4.4.4章,字符常量 单引号”、双引号“、问号?、反斜杠\,以及 任意整数值可根据下表表
'\233'、'\234'、'\235'
,当我打印它们时,会得到垃圾字符 这是一个转义序列,用于八进制值。语法是\nnn
您可以在中阅读有关转义序列的更多信息
垃圾被打印出来,因为八进制中的233是十进制中的155,234是156,235是157。它们不表示任何ascii字符。该符号是八进制转义序列,表示char
文字(char
常量)
引用C11
,第§6.4.4.4章,字符常量
单引号”
、双引号“
、问号?
、反斜杠\
,以及
任意整数值可根据下表表示
顺序:
- …
- 八进制字符
\octaldigits
\233
是八进制代码为233的字符
十进制为2×82+3×8+3=155
含义取决于所使用的字符集。超过127的代码不在7位ASCII中定义
正如DevSolar所宣传的:可能有帮助它们是八进制转义序列s,用于表示字符常量或字符串文本中的特定字节值 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中),这取决于我假设字符串采用的编码方式。可移植的是,我不能直接在源代码中写入这两个字符串中的任何一个,因为对任何不在源字符集中的字符的解释(即,ASCII-7不带美元、带符号和反勾号)是实现定义的。虽然现在大多数编译器可以将字符串文本解释为UTF-8,但八进制转义序列是可移植的方式
FWIW,也有十六进制转义序列;但是它们并没有定义得那么好:它们贪婪地吞食尽可能多的“十六进制数字”,甚至超过了字符
所能容纳的数量;因此,如果字符串文本中的下一个字符是[0-9a-fA-F]
中的一个,那么在此之前您无法“终止”十六进制转义(1);这就是为什么有些人喜欢八进制序列
(1) :正如M.M指出的,您可以将字符串文本一分为二(“\xAB”“CD”
)
至于各种字符值可以代表什么,在哪种编码中,我推荐一个好的代码表。我自己做了一个,因为我找不到任何现有的表,其中列出了我在一个页面中需要的所有信息。在字符串中,您可以通过使用文字串联来“终止”,例如
“\xAB”CD“
@M.M:…这使它成为两个串联的字符串文本,一点也不利于可读性。”但是是的,如果你坚持使用十六进制转义,这是一个解决办法。我已经和八度音阶和好了。