c - 为什么我必须使用\x1b 而不是\来表示转义字符

标签 c escaping control-characters low-level-io

我读到 \x1b 代表转义字符,但 '\' 本身不是转义字符吗?一个教程要我写

write(STDOUT_FILENO, "\x1b[2J", 4);

清除屏幕。为什么 '\[2J' 不能完成这项工作?

最佳答案

虽然这个问题有点老了,但我会以 \n 为例给出我的两分钱。

尽管ASCII 转义符\x1Bn\x6E,无法插入\使用 \x1B\x6E 将 n 字符转换为字符串,原因有两个:

  1. ASCII 表中的 ESC 字符和编程语言中的转义字符 \ 是两个不同的东西。

  2. 编程语言在源代码(在字节级别之前)中搜索\n(作为单个实体),并将其转换为换行字节,因此 \x1B\x6E 不会被转换为任何内容。因此,即使您在源代码中使用 \x5C\x6E (ASCII \ 和 ASCII 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。

关于c - 为什么我必须使用\x1b 而不是\来表示转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284599/

相关文章:

c - Minimax 不能在井字游戏中正确计分分支

c - Linux 中的 itoa 函数在哪里?

compiler-construction - Fortran 控制字符(回车控制)是否仍在编译器中实现?

c - 打开文本文件并在 C 中搜索字符串后无输出

c - 只读取 C 文本文件中的固定列宽

node.js - 如何在 ejs 中转义变量名中的撇号

linux - 如何使用 sh 回显双反斜杠加上变量(版本号),如 "\\hostname\release\1.02A01"?

java - 将转义引号读取为 xml 中的转义引号

python - 为什么 '\x' 在 Python 中无效?