我们编写的简单C/C++程序,大部分任务是做字符串的处理、呈现。字符串的操作方法有很多,C中多以char数组为处理对象,C++中则是封装了字符串类和文件类供我们使用。以下总结了最近一段时间在字符串处理上的一些小tips。
一、ASCII码
1、NULL的ASCII码为0,因此有些函数赋值NULL和0一样。
2、‘\0’ASCII码也为0,为字符串最后一个字符。
3、‘ ’空格字符的ASCII码为32,ASCII打印字符的第一个。
4、标准ASCII码使用7位二进制表示,最高位固定为0。
二、字符串操作
因为char数组不以‘\0’结尾,所以连接两个char型数组无法直接使用strcat等函数,可以采用sprintf函数。
msdn格式化输出符号总表
vs中使用sprint会报错,提示使用sprintf_s
因为理论上sprintf_s更安全,sprintf_s 设置了输出buffer的大小,会检查格式化字符的合法性。而sprintf只会检查是否为空指针(如果目标空间小,可能写入越界)。
数字格式化为字符串
% 4d 位整数,不够则左端补空格 %-4d右边补空格
% 4X 大写16进制显示,四位左端补零 %-4x小写16进制显示,右端补空格
十六进制默认补码存储,如果反向读出,需要自己把握正负。
比如sprintf(s,"x",-1) (s="FFFF")
如果通过sscanf()读取格式化的字符串中的数据
int num; sscanf(s,"%d",num) (num=65535)
因为对于计算机来说,以两个字节存储-1和65535是一样的
如果num有负数,那么可以通过判断num>32768来判断是否为负
%f默认六位小数,可以%.3f设置保留三位
字符串读出
三、C++中的Cstring类
将CString内容读出到char*可以简单使用
char s[100];
Cstring dog("wangwang");
sprintf(s,"%S",dog); //只是简单的写法,可能存在宽字节和单字节的问题,导致s不正常