请问有人可以解释一下字符常量中的 \000 和 \xhh 的使用方法吗?其中 \000 是八进制数,\xhh 是十六进制数。
在C语言中,字符串以值为零(0)的字符终止。
char zero = 0;
但是在字符串内部,这种方法不起作用。在字符串字面值中使用了一种特殊的语法,其中反斜杠作为转义序列引入,并跟随各种内容。
其中一种序列是“反斜杠零”,它表示一个值为零的字符。因此,您可以像这样编写:
char hard[] = "this\0has embedded\0zero\0characters";
'x'
和一个或两个十六进制数字,表示具有指定代码的字符。使用这种语法,例如,你可以将零字节写为 '\x0'
。'\00'
是 '\0'
的同义词。'\n'
、制表符 '\t'
等。这些字符用于在编辑器中书写无法打印的字符。对于标准字符,它可以是各种控制字符,对于wchar,它可能是编辑器字体中没有表示的字符。
例如,在Visual Studio 2005中编译如下代码:
const wchar_t bom = L'\xfffe'; /* Unicode byte-order marker */
const wchar_t hamza = L'\x0621'; /* Arabic Letter Hamza */
const char start_of_text = '\002'; /* Start-of-text */
const char end_of_text = '\003'; /* End-of-text */
编辑:使用八进制字符文字有一个有趣的注意点。 八进制数字似乎不能超过三位数,这人为地限制了我们可以输入的字符。
例如:
/* Letter schwa; capital unicode code point 0x018f (octal 0617)
* small unicode code point 0x0259 (octal 1131)
*/
const wchar_t Schwa2 = L'\x18f'; /* capital letter Schwa, correct */
const wchar_t Schwa1 = L'\617'; /* capital letter Schwa, correct */
const wchar_t schwa1 = L'\x259'; /* small letter schwa, correct */
const wchar_t schwa2 = L'\1131'; /* letter K (octal 113), incorrect */
八进制是基数为8(使用数字0-7),因此每个数字是3位:
\0354 = 11 101 100
十六进制是基数为16(使用数字0-9,A-F),每个数字是4位:
\x23 = 0010 0011
在C字符串(char数组/指针)中,它们通常用于编码无法轻松表示的字节。
因此,如果您想要一个使用ASCII代码(如STX和ETX)的字符串,可以执行以下操作:
char *msg = "\x02Here's my message\x03";