ASCII码,字符,字符串三者之间的关系

程序调试中遇到问题:

  1. 在使用sprintf 函数,在转换字符串时,如果遇到0时,会自动认为是结束标志,0以后的内容不会被添加进来。

复习一下字符串:

一. ASCII码是什么?

ASCII 全称为 ( American Standard Code for Information Interchange),简单的说,就是用 7 位二进制去编码我们生活中常见的数字,大小写字母,标点符号以及一些特殊的控制字符,如下:

数字:0 , 1 , 2 , 3 ... 9

字母:a , b , c ...z , A , B , C ... Z

标点符号以及运算符:,. + - ...

控制字符:回车,换行等控制字符

ASCII 编码表部分截图如下

ASCII码,字符,字符串三者之间的关系_第1张图片

二. 字符

在 上述 ASCII 编码表里的第 5 列,都可称之为字符。

字符又分为:

控制字符或者通信专用字符 ( 0 ~ 31以及127)

可显示字符 ( 32 ~ 126 )

使用示例

因此如果我们想要显示这些字符,我们只需要在存储其对应的编码值 ( 一般使用 16 进制,或者 10 进制),然后通过 printf 格式化输出得到我们想要的字符

#include
intmain(){charc1=0x48;//存储其十六进制
unsignedcharc2='e';//直接存储字符,但是本质上也是存储了其对应的编码值 
shortc3=108;//存进十进制 
intc4=108;//存进十进制 
longc5=0157;//存进八进制
longlongc6='!';//同上
longlongc7='\r';//同上
longlongc8='\n';//同上
printf("%c",c1);printf("%c",c2);printf("%c",c3);printf("%c",c4);printf("%c",c5);printf("%c",c6);printf("%c",c7);printf("%c",c8);}

运行结果

Hello!

从上面可以看出,上述的数据类型都可以使用,但是通常我们都用 char 来存储,因为他占用的内存大小刚好合适,不会浪费内存。

思考:为什么不用 unsigned char?

三. 字符串

从上面的编码过程 我们就可以看出来,一个个储存过于麻烦,因此我们就可以用字符串进行存储 ,但是在c语言中没有字符串数据类型 ( string ),因此声明一个字符类型数组,或者无符号类型数组来存储字符串。

使用示例

#include
#include
intmain(){unsignedcharstr1[]="Hello unsigned char!\r\n";//字符串 
printf("%s",str1);charstr2[]="Hello char!\r\n";printf("%s",str2);}

运行结果

Hellounsignedchar!Hellochar!

思考字符和字符串的区别

相同点

字符和字符串都可以用 char 和 unsigned char 数据类型进行存储

不同点

字符也可以用 整型类型 存储,但是字符串只能用 unsigned char 或 char 数据类型数组进行存储

字符存储时使用单引号 ' ' , 字符串使用双引号 “ ”

字符的格式化输出符号为 %c , 字符串的格式化输出符号为 %s

存单个字符时,字符占用1个字节,字符串占用两个字节,因为字符串总是以 '\0' 结尾,且\0 也占用一个内存空间

如何将字符数组按字符串输出

将字符存在字符类型的数组中,进行字符串的格式化输出。

#include
#include
intmain(){charstr1[]="Hello\r\n\0 world!";printf("%s",str1);charstr2[]={'H','e','l','l','o','\r','\n','\0','w','o','r','l','d'};printf("%s",str2);charstr3='H';printf("the size of str3 is %d\r\n",sizeof(str3));charstr4[]="H";printf("the size of str4 is %d\r\n",sizeof(str4));charstr5[]="He";printf("the size of str5 is %d\r\n",sizeof(str5));}

运行结果

HelloHellothesizeof'H'is1thesizeof"H"is2thesizeof"He"is3

总结

str1 中出现 \0 ,此时字符串输出结束,所以输出 Hello

str2 中出现 \0 ,此时字符串输出结束,所以输出 Hello

字符串结尾是 \0 ,也占用一个存储空间

你可能感兴趣的:(软件,stm32)