一:sprintf 组包
void test01() { int year = 2019; int mon = 8; int day = 1; //需求:将2019 8 1组成 2019年8月1日 char buf[64]=""; int len = sprintf(buf,"%d年%d月%d日",year,mon,day); printf("len = %d\n", len); printf("%s\n", buf); //需求:小明:18:男:北京海淀区 char name[]="小明"; int age = 18; char sex[]="男"; char addr[] ="北京海淀区"; char buf2[128]=""; len = sprintf(buf2,"%s:%d:%s:%s",name,age,sex,addr); printf("len = %d\n", len); printf("%s\n", buf2); //上线:版本号:块编号:主机名:用户名:功能:附加消息 //使用sprintf将数值 转成 字符串 char buf3[16]=""; sprintf(buf3,"%d",128); printf("buf3=%s\n", buf3); }
二:sscanf 解包
void test01() { char msg[]="2019年8月2日"; int year = 0; int mon = 0; int day = 0; //%d只能提取'0'~'9' sscanf(msg,"%d年%d月%d日",&year,&mon,&day); printf("year = %d\n",year); printf("mon = %d\n",mon); printf("day = %d\n",day); //%c 提取一个字符 %f提取浮点数 char ch=0; sscanf(msg,"%c年", &ch); printf("ch = %c\n", ch); //%s 提取一个字符串 遇到空格、回车、'\0'就会停止获取 char str_year[32]=""; char str_mon[32]=""; char str_day[32]=""; //char msg[]="2019年8月2日"; sscanf(msg,"%s年%s月%s日", str_year, str_mon,str_day ); printf("str_year =%s\n", str_year);//2019年8月2日 printf("str_mon =%s\n", str_mon); printf("str_day =%s\n", str_day); }
案例:sscanf 使用%*s或%*d