(一) C语言的字符

一、C语言的字符

1. C语言不存在字符串类型

C语言有字符类型,也就是char类型,char类型的数据占内存大小为1字节。C语言中不存在字符串类型!

 

2. C语言涉及的常见字符集

字符是一种图形符号,不同国家不同地区都有自己特殊的字符,于是就衍生了“字符集合”这个名词。其中ASCII (American Standard Code for Information Interchange: 美国信息交换标准代码)是国际通用的标准字符集,在网上随时可以找到标准ASCII表格(http://c.biancheng.net/c/ascii/),部分截图如下。

(一) C语言的字符

(一) C语言的字符

(一) C语言的字符

简单解读:

(1)使用一个字节来表示一个字符,也就是8个二进制位,并且第8个位都是0,2^7=128[0~127]。ASCII表的第一列是字符的二进制值,第二列是十进制,第三列是十六进制。一般是记忆字符的十进制ASCII值。

(2)ASCII可分为两种字符:33个不可显示字符 + 95个可显示字符。

(3)不可显示字符。可理解为无法在文本上进行显示的字符,但是能影响文本的显示或者具有某种特殊的控制功能,下面是几个特殊的不可显示字符:

A.空字符NULL: ASCII值为0,用于占据一个位置,这个位置可以继续使用(如字符串拼接)。空字符多用于字符串中,所以空字符也称为“字符串结束符”,表示一个字符串结束了,空字符之前的字符就是该字符串的最后一个字符。注意空字符空格字符是两个不一样的字符,空格字符的ASCII值为32,如下:

(一) C语言的字符

 

B. 回车符

回车符CR(Carriage Return:回车),ASCLL值是13。控制光标移动到当前行的开头(左边界)。

(一) C语言的字符

 

C.换行符

换行符LF(Line Feed):ASCLL值是10。控制光标移动到当前行的下一行。

(一) C语言的字符

 

D. 水平制表符

水平制表符HT(Horizontal Tab):ASCLL值是9。一般被定义为4/8个空格的宽度。

(一) C语言的字符

 

E.反斜杠字符

‘\’: ASCLL值是92

(一) C语言的字符

 

 

 (4)转义字符

对于上面列出的不能显示的字符,在程序中如何使用?肯定是不能直接使用其ASCII的,C语言中,定义了“转义字符”。使用组合:反斜杠+某个字母,来表示不能显示的字符,由于这些字符是固定的表示,在C语言中,可以汇总成一张表,转义字符表:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

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

008

\f

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

012

\n

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

010

\r

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

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?

代表一个问号

063

\0

空字符(NUL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

十六进制所代表的任意字符

十六进制

注:反斜杠+某个字母,表示的是一个字符。并不是反斜杠字符加另一个字符;回车和换行符经常组合到一起使用\r\n;

 

(5)可显示字符

A. 10个数字字符0[ASCII: 48]~9[ASCII: 57]

B. 26个大写字母A[ASCII: 65]~Z[ASCII: 90]和26个小写字母a[ASCII: 97]~z[ASCII: 122]

C. 标点和可显示的特殊字符[键盘上的字符,输入后能在txt文本上显示的]:{}、[]、!、@、#、?……

 

注:对于ASCII值,数字字符 < 大写字符 < 小写字符。

 

3.C语言如何存储一个ASCII字符

C语言可以使用一个字符类型的变量来存储一个字符,使用单引号将字符括起来,赋值给变量,对于字符变量,可以使用%c格式化输出单个字符。示例程序如下:

int main(void)

{

         char num_0 = '0';

         char num_1 = '1';

         char num_2 = '2';

         char ch_cr = '\r';

         char ch_lf = '\n';

         char num_3 = '3';

         char num_4 = '4';

         char num_5 = '5';

         char ch_tab = '\t';

         char num_6 = '6';

 

         printk("%c", num_0);

         printk("%c", num_1);

         printk("%c", num_2);

 

         printk("%c", ch_lf);

         printk("%c", ch_cr);

 

         printk("%c", num_3);

         printk("%c", num_4);

         printk("%c", num_5);

         printk("%c", ch_tab);

         printk("%c", num_6);

 

         printk("%c", ch_lf);

         printk("%c", ch_cr);

 

         return 0;

}

运行结果如下:

(一) C语言的字符

 

4. 字符的大小比较

C语言字符大小的比较,实际上比较的是ASCII值,示例程序如下:

(一) C语言的字符

输出如下:

(一) C语言的字符

因为字符在计算机内存中以ASCII的形式进行存储(1个字节,8个二进制位),可以直接以10进制打印出它们的值,实际上就对应ASCII表里面的ASCII值。程序如下:

(一) C语言的字符

输出如下:

(一) C语言的字符

5. 字符集的扩展

(1) EASCII

ASCII字符集使用7个二进制位(最高位第8位是0)来表示常见的字符,后来发现现有的128个字符不够用,于是对ASCII字符集进行了扩展,第8位也参与进来。这时候集合的元素个数就变成了2^8=256[0~255]个字符,增加了256-128=128个字符,这个字符集合命名为EASCII,英文全称“Extended ASCII”,可译为ASCII的扩展。它向下兼容ASCII字符集,即ASCII是EASCII的子集。

对于其他的字符集,比如GB2312、GB18030、BIG5、Unicode、UTF等字符集,涉及的就比较多,其他篇幅单独做介绍。

 

6. 小结

字符集和字符编码是两个不同的概念,字符集是一个集合,里面是符号,并且集合里的元素是固定的,唯一的,可确定的,是通用的(一种共识和标准)。而字符编码是字符在计算机中的存储形式,计算机只认识0和1两个数字。

下一篇:

上一篇:01Linux驱动模块02


下一篇:[MySQL FAQ]系列 -- 如何快速创建相同结构的表