C/C++字符串转义
转义C/C++字符串中的特殊字符,包括八进制和十六进制序列
关于C/C++字符串转义
C和C++语言使用反斜杠作为转义字符的前缀。字符串字面量中的特殊字符必须使用转义序列来表示,否则会导致编译错误或意外行为。
C/C++支持多种转义序列,包括简单转义(如 \n)、八进制转义(如 \012)和十六进制转义(如 \x0A)。理解这些转义序列对于正确处理二进制数据和特殊字符至关重要。
转义序列分类
简单转义序列
使用反斜杠后跟单个字符表示常见的控制字符
八进制转义序列
使用 \nnn 格式(1-3位八进制数字)表示任意字节值
十六进制转义序列
使用 \xnn 格式表示任意字节值,常用于二进制数据
Unicode转义(C++11)
使用 \uXXXX 或 \UXXXXXXXX 表示Unicode字符
转义规则参考
| 转义序列 | ASCII码 | 说明 |
|---|---|---|
| \\ | 0x5C | 反斜杠 |
| \' | 0x27 | 单引号 |
| \" | 0x22 | 双引号 |
| \n | 0x0A | 换行符 (LF) |
| \r | 0x0D | 回车符 (CR) |
| \t | 0x09 | 水平制表符 |
| \b | 0x08 | 退格符 |
| \f | 0x0C | 换页符 |
| \v | 0x0B | 垂直制表符 |
| \a | 0x07 | 响铃/警报 |
| \0 | 0x00 | NULL字符 |
| \ooo | 八进制 | 八进制值(1-3位) |
| \xhh | 十六进制 | 十六进制值(2位) |
常见使用场景
嵌入式系统
在嵌入式C代码中处理串口通信和控制字符。
二进制协议
构建包含特定字节序列的网络协议数据包。
文件路径
在Windows路径中正确处理反斜杠。
格式化输出
在printf格式字符串中使用换行和制表符。
使用技巧
- 八进制转义最多使用3位数字,超过377(255)会产生警告
- 十六进制转义没有位数限制,但只取最后两位有效
- C++11引入了原始字符串字面量 R"(...)",可以避免转义
- 宽字符串(L"...")和UTF-8字符串(u8"...")使用相同的转义规则
- 字符串字面量连接时,转义序列不会跨越字面量边界
原始字符串(C++11)
C++11引入了原始字符串字面量,允许在字符串中包含任何字符而无需转义。语法为 R"delimiter(content)delimiter",其中delimiter是可选的用户自定义分隔符。