前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 | 如何使用 sscanf 提取AT命令返回结果中的有效数据

C语言 | 如何使用 sscanf 提取AT命令返回结果中的有效数据

作者头像
Mculover666
发布2021-10-09 16:36:49
4.4K0
发布2021-10-09 16:36:49
举报
文章被收录于专栏:TencentOS-tiny

1. sscanf函数

sscanf是C标准库函数,用于「从字符串中读取格式化输入」

头文件:

代码语言:javascript
复制
#include <stdio.h>

函数原型如下:

代码语言:javascript
复制
int sscanf(const char *s, const char *format, ...);

函数返回值:「返回成功读取的数量」

2. 使用实例

提取信号强度

AT命令返回结果为:

代码语言:javascript
复制
+CSQ: 17,0

OK

先使用strstr找到标志字符:

代码语言:javascript
复制
str = strstr(buffer, "+CSQ");

if (!str) {
 return -1;
}

接着使用sscanf提取「数值类型」

代码语言:javascript
复制
ret = sscanf(str, "+CSQ:%d,%d", &rssi, &ber);
if (ret != 2) {
 return -1;
}

提取基站信息

AT命令返回结果为:

代码语言:javascript
复制
+CREG: 2,0,"252A","6DD2104",7
OK

使用sscanf提取「固定长度字符」

代码语言:javascript
复制
sscanf(buffer, "+CREG:%d,%d,\"%4s\",\"%7s\"", &n, &stat, lac_buf, ci_buf);

提取IP地址

AT命令返回结果为:

代码语言:javascript
复制
+CIFSR:STAIP,"10.89.100.53"
+CIFSR:STAMAC,"dc:29:19:bb:d7:d3"
OK

使用sscanf提取数值类型:

代码语言:javascript
复制
sscanf(str + strlen("STAIP,"), "\"%d.%d.%d.%d\"", &seg1, &seg2, &seg3, &seg4);

另外一种写法是直接写到格式化字符串中:

代码语言:javascript
复制
sscanf(str, "STAIP,\"%d.%d.%d.%d\"", &seg1, &seg2, &seg3, &seg4);

提取MAC地址

AT命令返回结果为:

代码语言:javascript
复制
+CIFSR:STAIP,"10.89.100.53"
+CIFSR:STAMAC,"dc:29:19:bb:d7:d3"
OK

使用sscanf提取十六进制数值类型:

代码语言:javascript
复制
sscanf(str + strlen("STAMAC,"), "\"%2x:%2x:%2x:%2x:%2x:%2x\"", &seg1, &seg2, &seg3, &seg4,&seg5,&seg6);

正则表达式提取不定长字符

AT命令返回结果为:

代码语言:javascript
复制
+CWLAP:(4,"TP-LINK_PocketAP_DFBCD4",-57,"38:83:45:df:bc:d4",6)
+CWLAP:(3,"LSTM",-61,"8c:21:0a:bc:8e:70",13)
+CWLAP:(3,"LabWiFi",-62,"68:3b:78:8f:16:23",1)
+CWLAP:(0,"GuestWiFi",-64,"68:3b:78:8f:16:22",1)

OK 

先找到+CWLAP

代码语言:javascript
复制
strstr(buffer+offset, "+CWLAP:");

使用sscanf+正则表达式提取ssid、mac、rssi:

代码语言:javascript
复制
sscanf(str+strlen("+CWLAP:"), "(%d,\"%[^\"]\",%d,\"%[^\"]\",", &ecn, ssid, &rssi, mac);

读取之后,将str指针移动到该行结束,进行下一轮的查找:

代码语言:javascript
复制
while (*str++ != '\n') {
     offset++;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. sscanf函数
  • 2. 使用实例
    • 提取信号强度
      • 提取基站信息
        • 提取IP地址
          • 提取MAC地址
            • 正则表达式提取不定长字符
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档