我读过它\x1b
代表转义字符,但它'\'
本身不是转义字符吗?一个教程要我写
write(STDOUT_FILENO, "\x1b[2J", 4);
清除屏幕。为什么不'\[2J'
做作业?
我读过它\x1b
代表转义字符,但它'\'
本身不是转义字符吗?一个教程要我写
write(STDOUT_FILENO, "\x1b[2J", 4);
清除屏幕。为什么不'\[2J'
做作业?
虽然这个问题有点老了,但我会以我的两分钱\n
为例。
尽管ASCII escape character
is\x1B
和n
is \x6E
,但无法使用 将\n
字符插入字符串\x1B\x6E
,原因有两个:
ESC
ASCII 表中的字符和编程语言中的转义字符是\
两个不同的东西。
编程语言在源代码中搜索\n
(作为单个实体)(在我们处于字节级别之前)将其转换为换行字节,因此不会被转换为任何内容。因此,即使您在源代码中使用(一个 ASCII和一个 ASCII ),它也不会被转换为换行符。\x1B\x6E
\x5C\x6E
\
n
Python 中的示例:
>>> print("Hello\x5C\x6EWorld")
Hello\nWorld
# if one still insists on inserting a new line using an ascii line-feed (\x0A), they can do:
>>> print("Hello\x0AWorld")
Hello
World
HTH。
稍微详细说明一下 Ken 和 Jonathan 的评论: Escape here 是一个一般概念。它基本上意味着改变某事的解释。ASCII 中的转义字符起源于电传打字机,其中 ESC 的出现改变了对后面字符的解释。许多终端以相同的方式使用它。例如,在字符串前出现 ESC[2J
导致字符串(即字符[
、2
和J
)在终端不显示,而是解释为命令“清除整个屏幕”。因此,转义字符改变了解释模式。
但是,没有直接的方法可以输入 ASCII 转义字符(因为在键盘上按 ESC 键通常会更改编辑器、终端或其他任何东西中的模式),即使可以,语言 C 的允许字符集也不会不包括它。现在,您需要第二级转义:C 有自己的转义字符:\
。它改变了下一个字符的含义。例如,前面的反斜杠将后面字符的含义(解释)更改n
为换行符。此外,\x
(或\0
,分别)让 C 解析器将以下两(三)个字符解释为十六进制(八进制)数字 - 而不是字符本身 - 并插入与该代码号相对应的字符。由于转义的 ASCII 代码分别具有数字 27(十进制)或 1b(十六进制)或 33(八进制),因此您可以通过\x1b
或生成 C 中的 ASCII 转义字符\033
。
换句话说,您在 C 中转义\
以生成 ASCII 转义字符,这反过来又会在您的终端强制转义。