目录

一、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解包相关推荐

  1. C杂讲 字符串格式化 组包与解包

    知识点1[sprintf组包] 案例: int sprintf(buf,"格式",数据) //buf:用来存放组好的报文 //"格式":按照格式组包 //数据: ...

  2. 微信小程序抓包与逆向+微信小程序反编译教程+解包教程+解包工具

    免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西 本人发布的视频.环境.软件.脚本.文章.资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付 部分技术 ...

  3. java socket发送定长报文_定长消息报文的组包与解包简单封装(Java实现)

    报文 组包 解包 在实际项目中经常会碰到不同系统之间的数据交换,有些是用webservice.有些则是使用发socket消息的方式,将需要发送的消息组装成特定格式的字符串或Xml格式的文件,再通过so ...

  4. python3 抓包 解包_Python结构包,解包

    python3 抓包 解包 Python struct module is capable of performing the conversions between the Python value ...

  5. ozip解密_ozip解包工具下载oppo刷机包ozip解包一加ops解包

    支持机型及测试说明 OPPO卡刷包是ozip格式,需要解密处理才能转回zip格式,第三方recovery才能刷入, 由于OPPO每个型号采用了不同的解密key,所以需要对机型做适配.本文从网络搜集整理 ...

  6. python解包exe_解包 Python 3 的安装包

    Python 3 使用的是一种叫做 WiX Toolset 安装包格式.吐个槽:目前只见过 Python 用这种安装包格式 WiX Toolset 提供了一个工具 dark.exe 可以解开这种格式的 ...

  7. python-装包与解包

    装包与解包的理解:[装包]就是把未命名的参数放到元组中,把命名参数放到字典中[拆包]将一个结构中的数据拆分为多个单独变量中 *args **kwargs python 数据类型可以装包拆包:      ...

  8. jar包的解包和重新打包

    有时候部署在服务器上的java程序要修改配置文件里的参数,就要对jar包进行解压-修改参数-重新打包,网上搜到的命令没有指定一些主要参数打出来的包可能无法使用,下面这个是能用的. 解包 unzip d ...

  9. 收包与解包 - Linux C++网络编程(二十四)

    一:收包分析及包头结构定义 发包:采用 包头+包体,其中包头中记录着整个包[包头-+包体]的长度: 包头:就是一个结构: a)一个包的长度不能超过30000个字节,必须要有最大值: 伪造恶意数据包,他 ...

最新文章

  1. jQuery Mobile的学习时间bottonbutton的事件学习
  2. 蚂蚁金服的一次面试你都会吗
  3. 【Vegas原创】安装rhel6.2,不能进图形化界面的终极解决方法
  4. [转载]我看到的最好的解释AngularJs中Factory和Service和Provide不同
  5. idea new对象后自动补全_IDEA的quot;奇淫巧技quot;
  6. C# 外接(网口)双摄像头视频获取
  7. hive serde 序列化与反序列化 - 一行数据写入hive表
  8. MySQL高级-MySQL应用优化
  9. html5烟花特效代码,漂亮的JavaScript烟花特效代码
  10. 冥想---提高元认知能力
  11. 命令启动oracle实例,【单选题】启动oracle数据库实例的命令是
  12. php 识别lrc,自动识别LRC歌词精选.pptx
  13. 心有猛虎,细嗅蔷薇。—第二十六天
  14. 常用面试问题50问(转载)及回答技巧
  15. 计算机的基本知识理论,计算机基本理论基础知识总汇
  16. 【springboot项目添加ico方法】
  17. 100个常见的php面试题和答案分享,精选php面试题及答案
  18. unity基础(8)——3D场景添加音频
  19. 一对一直播源码开发,一对一直播系统开发
  20. 微软将在下个月结束对 Windows 7 和 8.1 的支持

热门文章

  1. 输入法半角和全角的快捷转换_搜狗输入法经常用到的冷门小技巧,复制文章空白行取消方法...
  2. 新产品常用的网络广告发布方法有哪些?
  3. Codeforces 1324D Pair of Topics
  4. 连续被特斯拉碾压的国产车终于成功反击,五菱宏光月销超2万
  5. 晶飞FLA5000光谱仪.FlaSpec格式解析批处理导出CSV文件
  6. 使用SDNN (space displacement neural network)进行多字体手写识别
  7. 三针风扇接法_三针和四针CPU风扇有什么区别?
  8. 运行maven打包的项目jar包
  9. 内容推荐场景下多模态语义召回的若干实践
  10. 设置窗体显示在屏幕的位置