C语言转义字符

字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)。

转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x

开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。

字符 1、2、3、a、b、c 对应的 ASCII 码的八进制形式分别是 61、62、63、141、142、143,十六进制形式分别是 31、32、33、61、62、63。下面的例子演示了转义字符的用法:


char a = '\61'; //字符1
char b = '\141'; //字符a
char c = '\x31'; //字符1
char d = '\x61'; //字符a
char *str1 = "\x31\x32\x33\x61\x62\x63"; //字符串"123abc"
char *str2 = "\61\62\63\141\142\143"; //字符串"123abc"
char *str3 = "The string is: \61\62\63\x61\x62\x63" //混用八进制和十六进制形式


转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。

一个完整的例子:


#include 
int main(){
 puts("\x68\164\164\x70://c.biancheng.\x6e\145\x74");
 return 0;
}


运行结果:
http://c.biancheng.net

转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限:

  • 八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177
  • 十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\x7f


超出范围的转义字符的行为是未定义的,有的编译器会将编码值直接输出,有的编译器会报错。

对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,甚至无法从键盘输入,只能用转义字符的形式来表示。不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以,针对常用的控制字符,C语言又定义了简写方式,完整的列表如下:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT)

009

\v

垂直制表(VT)

011

\'

单引号

039

\"

双引号

034

\\

反斜杠

092


\n\t是最常用的两个转义字符:

  • \n用来换行,让文本从下一行的开头输出,前面的章节中已经多次使用;
  • \t用来占位,一般相当于四个空格,或者 tab 键的功能。


单引号、双引号、反斜杠是特殊的字符,不能直接表示:

  • 单引号是字符类型的开头和结尾,要使用\'表示,也即'\''
  • 双引号是字符串的开头和结尾,要使用\"表示,也即"abc\"123"
  • 反斜杠是转义字符的开头,要使用\\表示,也即'\\',或者"abc\\123"


转义字符示例:

#include 
int main(){
 puts("C\tC++\tJava\n\"C\" first appeared!");
 return 0;
}


运行结果:

C C++ Java

"C" first appeared!

相关文章

C语言-指针与16进制

①规则16进制1、2、3、4、5、6、7、8、9、10用A表示、11用B表示、12用C表示、13用D表示、14用E表达、15用F表达、16进位。~②例子#includemain(){int a[10]...

深入理解二进制十进制十六进制

平常我们在上C语言课时,进制数有二进制,八进制,十进制,十六进制,但这里我们为什么不讲八进制,因为在平时的工作中,几乎不会用八进制。十进制:我们平时使用的数都是由0~9共十个数字组成的。例如1,9,1...

PLC编程必看!5种常见进制数解析,搞懂才能玩转PLC!

今天咱们聊聊PLC编程中那些“神秘”的进制数——二进制、十进制、十六进制…是不是一听就头大?别慌!看完这篇,保证你从“懵逼”变“大神”!1.二进制(Binary)●定义:仅由 0 和 1 组成的进制,...

资深的程序员都是这样排查Java问题的,附工具单

摘要: 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日...

net core中byte数组如何高效转换为16进制字符串

在 .NET Core 中,如何把 byte[] 转换为 16 进制字符串?你能想到哪些方法?什么方式性能最好?今天和大家分享几种转换方式。往往在处理字符串性能问题时,首先应该想到的是怎么想办法减少内...