2019独角兽企业重金招聘Python工程师标准>>>

先上例子:

#include <stdio.h>
using namespace std;
int main()
{const char* s = "123456";char buf[20];unsigned int aa1, aa2, aa3;//注意不能用unsigned charsscanf( s, "%02x%02x%02x", &aa1, &aa2, &aa3 );printf( "%02x,%02x,%02x\n", aa1, aa2, aa3 );return 0;
}

头文件

#include<stdio.h>

定义函数 int sscanf (const char *str,const char * format,........);

函数说明

sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败    否则,表示正确格式化数据的个数    例如:sscanf(str,"%d%d%s", &i,&i2, &s);    如果三个变成都读入成功会返回3。    如果只读入了第一个整数到i则会返回1。证明无法从str读入第二个整数。

void main()
{ int i; unsigned int j; char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”; char s[5]; sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s); printf(“%d %d %s ”,i,j,s);
}

执行 10 27 aaaaa

大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。

1. 常见用法

char str[512]={0};
sscanf("123456","%s",str);
printf("str=%s",str);

2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

char str[512]={0};
sscanf("123456","%4s",str);
printf("str=%s",str);

3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

char str[512]={0};
sscanf("123456abcdedf","%[^]",str);
printf("str=%s",str);

4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

char str[512]={0};
sscanf("123456abcdedfBCDEF","%[1-9a-z]",str);
printf("str=%s",str);

5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

char str[1024]={0};
sscanf("123456abcdedfBCDEF", "%[^A-Z]", str);
printf("str=%s\n", str);

6. 可以用如下代码将字符串形式的ip地址转换为四个整数

char * inputIp="192.168.199.100";
int ip[4];
sscanf(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1],&ip[2],&ip[3]);
printf("%d.%d.%d.%d\n",ip[0], ip[1],ip[2],ip[3]);

7. sscanf的使用,以解析时间字符串为例,将字符串“2009-01-02_11:12:13”解析为整型年月日时分秒

//定义char cc;tm tm_temp={0};string stime("2009-01-02_11:12:13");

//(1) 必须严格按照分隔符形式匹配填写,若遇到不匹配项则终止解析

 sscanf(stime.c_str(), "%4d-%2d-%2d_%2d:%2d:%2d",&tm_temp.tm_year, &tm_temp.tm_mon, &tm_temp.tm_mday, &tm_temp.tm_hour, &tm_temp.tm_min, &tm_temp.tm_sec);

//(2) 可以不按照分割符号形式填写,字符数必须一致,例如可以正确解析“2009/01/02_11:12:13”

 sscanf(stime.c_str(), "%4d%c%2d%c%2d%c%2d%c%2d%c%2d",&tm_temp.tm_year, &cc,&tm_temp.tm_mon, &cc,&tm_temp.tm_mday, &cc,&tm_temp.tm_hour, &cc,&tm_temp.tm_min, &cc,&tm_temp.tm_sec);

//(3) 可以不按照分割符号形式填写,字符数必须一致,同上,%1s可以等同于%c

 sscanf(stime.c_str(), "%4d%1s%2d%1s%2d%1s%2d%1s%2d%1s%2d",&tm_temp.tm_year, &cc,&tm_temp.tm_mon, &cc,&tm_temp.tm_mday, &cc,&tm_temp.tm_hour, &cc,&tm_temp.tm_min, &cc,&tm_temp.tm_sec);

//(4) 可以不按照分割符形式和数量填写,类型必须一致,例如可以正确解析“2009/01/02___11:12:13”

//这里使用了sscanf的正则表达式,与通用的正则表示类似但不完全相同,%*c表示忽略连续多个字符

 sscanf(stime.c_str(), "%4d%*c%2d%*c%2d%*c%2d%*c%2d%*c%2d",&tm_temp.tm_year, &tm_temp.tm_mon, &tm_temp.tm_mday, &tm_temp.tm_hour, &tm_temp.tm_min, &tm_temp.tm_sec);

转载于:https://my.oschina.net/crooner/blog/221952

sscanf函数—(sprintf的反)相关推荐

  1. C语言sprintf 和 sscanf函数

    C语言sprintf()和 sscanf()函数 sprintf()函数 上图链接:https://mp.weixin.qq.com/s?src=11&timestamp=1584781288 ...

  2. c语言sscanf函数和结构体,C语言sprintf与sscanf函数 -电脑资料

    1.前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来,总结一下.C语言提供了一些列的格式化输入输出函数,最基本的是面向控制台标准 ...

  3. sscanf函数和正则表达式

    From: http://hi.baidu.com/cr0_3/blog/item/c98f6ad0d54d9a0d3af3cfa2.html 看了几篇介绍sscanf函数,真是发现自己好多东西没理解 ...

  4. c语言从html控件sscanf,sscanf与sprintf在C语言中的用法

    sscanf与sprintf是C语言处理字符串的利器,可以用于快速格式化字符串. 我们知道,C语言中的输入和输出函数:printf和scanf第一个参数是格式化输出的内容. 例如%d为整数,%f为浮点 ...

  5. sscanf和sprintf的高级用法

    sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数 头文件 stdio.h 原型 int sscanf( const char *buffer ...

  6. matlab sscanf用法,sscanf函数的用法

    木之叶舞 - 三级 2009-7-29 02:05 int型的数也会被转成字符型的,比如你输入的是程序名 123 那么argc=2,argv[1]="123".你可以用atoi或者 ...

  7. c语言以空格分割字符串_C语言: 利用sscanf() 函数分割字符串

    头文件:#include sscanf()函数用于从字符串中读取指定格式的数据,其原型如下: int sscanf (char *str, char * format [, argument, ... ...

  8. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  9. PHP 之 函数 sprintf() 的学习

    PHP 之 函数 sprintf() 的学习 将字串格式化. 语法: string sprintf(string format, mixed [args]...); 传回值: 字串 函式种类: 资料处 ...

  10. sscanf函数中类型不匹配警告引发的BUG和思考

    2019独角兽企业重金招聘Python工程师标准>>> BUG产生背景 项目开发中的在对网络的IP等地址进行协议封装的处理过程中,我使用了如下的一段代码: buff[0] = con ...

最新文章

  1. 认真对待学习(2月反思)
  2. Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例
  3. ext2.2打造全新功能grid系列--仅仅动态生成GridPanel
  4. 带宽测量:pathload编译及运行
  5. css hacks (ie6,ie7,ie8,firefox,Chrome)
  6. maven的聚合和继承详解(2021版)
  7. 计算机多媒体最新参考文献,计算机多媒体论文
  8. 通过在路由器上安装Tomato来提高网络性能
  9. Android APK 反编译工具 JADX
  10. Java工具类之Base64Utils实现base64码转换为文件流-yellowcong
  11. 手摸手。完成一个H5 抽奖功能
  12. Soya语言1.0.1-alpha发布!
  13. 一文读懂iOS如何使用TestFlight进行测试
  14. 外罚函数法(二):SUMT算法及其收敛性证明
  15. excel pandas 画图_pandas 进行excel绘图
  16. CSS盒模型(详解)
  17. java lib 不在构建路径里面问题_svn - Eclipse“这个编译单元不在java项目的构建路径上”...
  18. 计算机集成制造系统 刊物界别,基于多传感器的高速CNC机床集成监控系统设计.pdf...
  19. SSL证书的作用,可以帮助网站达到什么样的效果
  20. AD19 PCB设计导入元件库、导出pdf、定义板子形状、生成元件库、铺铜基本操作总结

热门文章

  1. 为博客园博文添加目录的两种方法
  2. PAT刷题 (Java语言)
  3. We Chall-Training: Get Sourced-Writeup
  4. php+sql创建本地项目详细步骤1——创建数据库数据表,数据库连接
  5. ip_vs实现分析(7)
  6. SetNoneScaleMutableGraph
  7. php7.1 改动,PHP7错误处理机制修改
  8. 【STM32】利用 C 语言 strchar() 函数查找字符串中指定字符的位置
  9. 【Matlab】子图添加子序号 (a) (b) (c) 及调整子图间距边距 科研绘图
  10. 【Paper】2012_Distributed Average Tracking of Multiple Time-Varying Reference Signals With Bounded