C语言---sprintf组包、sscanf解包
目录
一、sprintf组包(了解)
(一)案例1:将2022 9 24这三个数据组成一个“2022年9月24日”
(二)案例2:将一个人的姓名、年龄、性别、家庭地址组成要求的格式
(三)案例3:将数值转成字符串
二、sscanf解包
(一)案例1:sscanf基础语法
(二)sscanf的高级用法
1、使用%*s、%*d跳过提取的内容(不要提取的内容)
2、使用%[n]s、%[n]d来提取指定宽度n的字符串或数据
3、%[a-z]用来提取a-z的字符串
4、%[aBc]提取aBc这三个字符
5、%[^abc] 只要不是abc字符,任何一个都要
(三)综合应用
1、提取字符串中指定的内容
一、sprintf组包(了解)
格式:int sprintf(buf,"格式",数据)
buf:用来存放组好的报文
"格式":按照格式组包
数据:各个零散的数据
返回值:组好的报文的实际长度(不包含'\0')
(一)案例1:将2022 9 24这三个数据组成一个“2022年9月24日”
int year = 2022;
int mon = 9;
int day = 24;
int len = 0;
char buf[128]="";// %d 和 year 类型要一一对应
len = sprintf(buf,"%d年%d月%d日", year, mon, day);
printf("len = %d\n", len); // 13,其中中文以两个字节存放
printf("buf=%s\n",buf); // 2022年9月24日
(二)案例2:将一个人的姓名、年龄、性别、家庭地址组成要求的格式
char name[]="幽默的彩旗";
int age = 18;
char sex[]="男";
char addr[]="合肥市包河区";
char buf[128]="";
int len = 0;len = sprintf(buf,"姓名:%s 年龄:%d 性别:%s 地址:%s", name, age, sex, addr);
printf("len = %d\n",len); // 49
printf("buf=%s\n",buf); // 姓名:幽默的彩旗 年龄:18 性别:男 地址:合肥市包河区
(三)案例3:将数值转成字符串
int num = 2020;char buf[128]="";sprintf(buf,"%d",num);printf("buf=%s\n", buf); // "buf=2020"
二、sscanf解包
- 与sprintf相对应,从给定的字符串中按格式提取数据给到变量
(一)案例1:sscanf基础语法
char buf[]="2020年2月24日";
int year=0;
int mon=0;
int day=0;
char ch = 0;
char str_year[32]="";
char str_mon[32]="";
char str_day[32]="";// %d 只能提取'0'~'9'
sscanf(buf,"%d年%d月%d日", &year,&mon,&day );
printf("year = %d\n",year); // 2020
printf("mon = %d\n",mon); // 2
printf("day = %d\n",day); // 24// %c 提取一个字符 %f 提取提取浮点数
sscanf(buf,"%c", &ch);
printf("##%c##\n",ch); // ##2## // %s 提取一个字符串 遇到空格、回车、'\0' 就停止获取
// buf==>"2020年2月24日"
sscanf(buf,"%s年%s月%s日",str_year, str_mon,str_day );
printf("str_year=%s\n",str_year); // "2020年2月24日"
printf("str_mon=%s\n",str_mon); // null
printf("str_day=%s\n",str_day); // null
(二)sscanf的高级用法
1、使用%*s、%*d跳过提取的内容(不要提取的内容)
int data1=0;
// sscanf("1234 5678","1234 %d",&data1); // 5678
// sscanf("1234 5678","%*d %d",&data1); // 5678
sscanf("1234 5678","%*s %d",&data1); // 5678
printf("data1=%d\n",data1);
2、使用%[n]s、%[n]d来提取指定宽度n的字符串或数据
int data1 = 0;
int data2 = 0;
char buf[16]="";sscanf("12abc5678","%*5s%d" ,&data1); // 5678
printf("data1=%d\n",data1);sscanf("12345678","%*2s%2d%*2d%s" ,&data2, buf); // data2=34 buf="78";
printf("data2 = %d\n",data2); // 34
printf("buf=%s\n", buf); // "78"
3、%[a-z]用来提取a-z的字符串
从头开始提取,遇到第一个不是a-z的字符结束
char buf[128]="";
// %[]都是按字符串提取
sscanf("abcDefABC","%[a‐z]",buf); // 识别到D时,没有别的格式提取就结束
printf("buf=%s\n", buf); // "abc"
4、%[aBc]提取aBc这三个字符
- 从头开始提取,遇到第一个不是aBc当中的字符就结束
char buf[128]="";sscanf("aaBBcEdef","%[aBc]",buf);
printf("buf=%s\n", buf); // aaBBc
5、%[^abc] 只要不是abc字符,任何一个都要
从头开始提取,遇到第一个是abc当中的字符就结束
char buf[128]="";sscanf("ABCcABC","%[^abc]",buf);
printf("buf=%s\n", buf); // ABC
(三)综合应用
1、提取字符串中指定的内容
char name[32]="";
char addr[32]="";sscanf("youmodecaiqi@1360138.com","%[^@]%*1s%[^.]", name, addr); // 跳过一个字符
sscanf("youmodecaiqi@1360138.com"","%[^@]%*c%[^.]", name, addr); // %c提取@
sscanf("youmodecaiqi@1360138.com"","%[^@]@%[^.]", name, addr); // 用@来跳过
printf("name=%s\n", name); // "youmodecaiqi"
printf("addr=%s\n", addr); // "1360138"
C语言---sprintf组包、sscanf解包相关推荐
- C杂讲 字符串格式化 组包与解包
知识点1[sprintf组包] 案例: int sprintf(buf,"格式",数据) //buf:用来存放组好的报文 //"格式":按照格式组包 //数据: ...
- 微信小程序抓包与逆向+微信小程序反编译教程+解包教程+解包工具
免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西 本人发布的视频.环境.软件.脚本.文章.资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付 部分技术 ...
- java socket发送定长报文_定长消息报文的组包与解包简单封装(Java实现)
报文 组包 解包 在实际项目中经常会碰到不同系统之间的数据交换,有些是用webservice.有些则是使用发socket消息的方式,将需要发送的消息组装成特定格式的字符串或Xml格式的文件,再通过so ...
- python3 抓包 解包_Python结构包,解包
python3 抓包 解包 Python struct module is capable of performing the conversions between the Python value ...
- ozip解密_ozip解包工具下载oppo刷机包ozip解包一加ops解包
支持机型及测试说明 OPPO卡刷包是ozip格式,需要解密处理才能转回zip格式,第三方recovery才能刷入, 由于OPPO每个型号采用了不同的解密key,所以需要对机型做适配.本文从网络搜集整理 ...
- python解包exe_解包 Python 3 的安装包
Python 3 使用的是一种叫做 WiX Toolset 安装包格式.吐个槽:目前只见过 Python 用这种安装包格式 WiX Toolset 提供了一个工具 dark.exe 可以解开这种格式的 ...
- python-装包与解包
装包与解包的理解:[装包]就是把未命名的参数放到元组中,把命名参数放到字典中[拆包]将一个结构中的数据拆分为多个单独变量中 *args **kwargs python 数据类型可以装包拆包: ...
- jar包的解包和重新打包
有时候部署在服务器上的java程序要修改配置文件里的参数,就要对jar包进行解压-修改参数-重新打包,网上搜到的命令没有指定一些主要参数打出来的包可能无法使用,下面这个是能用的. 解包 unzip d ...
- 收包与解包 - Linux C++网络编程(二十四)
一:收包分析及包头结构定义 发包:采用 包头+包体,其中包头中记录着整个包[包头-+包体]的长度: 包头:就是一个结构: a)一个包的长度不能超过30000个字节,必须要有最大值: 伪造恶意数据包,他 ...
最新文章
- jQuery Mobile的学习时间bottonbutton的事件学习
- 蚂蚁金服的一次面试你都会吗
- 【Vegas原创】安装rhel6.2,不能进图形化界面的终极解决方法
- [转载]我看到的最好的解释AngularJs中Factory和Service和Provide不同
- idea new对象后自动补全_IDEA的quot;奇淫巧技quot;
- C# 外接(网口)双摄像头视频获取
- hive serde 序列化与反序列化 - 一行数据写入hive表
- MySQL高级-MySQL应用优化
- html5烟花特效代码,漂亮的JavaScript烟花特效代码
- 冥想---提高元认知能力
- 命令启动oracle实例,【单选题】启动oracle数据库实例的命令是
- php 识别lrc,自动识别LRC歌词精选.pptx
- 心有猛虎,细嗅蔷薇。—第二十六天
- 常用面试问题50问(转载)及回答技巧
- 计算机的基本知识理论,计算机基本理论基础知识总汇
- 【springboot项目添加ico方法】
- 100个常见的php面试题和答案分享,精选php面试题及答案
- unity基础(8)——3D场景添加音频
- 一对一直播源码开发,一对一直播系统开发
- 微软将在下个月结束对 Windows 7 和 8.1 的支持
热门文章
- 输入法半角和全角的快捷转换_搜狗输入法经常用到的冷门小技巧,复制文章空白行取消方法...
- 新产品常用的网络广告发布方法有哪些?
- Codeforces 1324D Pair of Topics
- 连续被特斯拉碾压的国产车终于成功反击,五菱宏光月销超2万
- 晶飞FLA5000光谱仪.FlaSpec格式解析批处理导出CSV文件
- 使用SDNN (space displacement neural network)进行多字体手写识别
- 三针风扇接法_三针和四针CPU风扇有什么区别?
- 运行maven打包的项目jar包
- 内容推荐场景下多模态语义召回的若干实践
- 设置窗体显示在屏幕的位置