C语言基础【24】:组包和解包
1.sprintf(存放字符串首地址,“相应格式”,数据):组包函数
int year = 2025;
int month = 9;
int day = 24;
char arr[128]={};
int len = sprintf(arr,"%d年%d月%d日",year,month,day); //返回实际组包长度
此代码还实现了数字转字符串的一个操作。
2.sscanf(数据来源首地址,“相应格式”,保存数据的目标地址):解包函数
int year=0;
int month=0;
int day=0;
sscanf(arr,"%d年%d月%d日",&year,&month,&day);
%d:遇到不是‘0’-‘9’的结束,并且不会移动指针,会停下来。
%s:遇到空格或者\0停止
Tip:所有的停止都意味着不会再读取后面的数据,即使后面的数据可能匹配。
3.sscanf()的其他用法
3.1 %*d和%*s丢弃提取的值
3.2空格可能会被编译器优化,不影响匹配
3.3 %3s或者%3d,提取时只取3位
char arr[128] = {"12345678"};
int num =0;
sscanf(arr,"%*2d %2d",&num); //提取34
4.%[]提取
%[a-z,A-Z] //表示提取英文字母,并且不区分大小写,遇到非英文字母停止提取
%[aBc] //提取aBc字母,遇到其他的停止提取
%[^aBc] //提取除aBc以外的东西,遇到他们三停止
例子:取abc#jkl#iop中两个#之间的字符
sscanf(arr,%*[^#]#%[^#]);
定位#用到%[^#],第一个#前的不要,用到*。为了让指针走过#,需要给到一个#进行匹配,或者用到%*c也行。