IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言 | 使用 sscanf 提取AT命令返回结果中的有效数据 -> 正文阅读

[C++知识库]C语言 | 使用 sscanf 提取AT命令返回结果中的有效数据

1. sscanf函数

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

头文件:

#include <stdio.h>

函数原型如下:

int sscanf(const char *s, const char *format, ...);

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

2. 使用实例

AT指令参考文章:

提取信号强度

AT命令返回结果为:

+CSQ: 17,0

OK

先使用strstr找到标志字符:

str = strstr(buffer, "+CSQ");

if (!str) {
	return -1;
}

接着使用sscanf提取数值类型

ret = sscanf(str, "+CSQ:%d,%d", &rssi, &ber);
if (ret != 2) {
	return -1;
}

提取基站信息

AT命令返回结果为:

+CREG: 2,0,"252A","6DD2104",7
OK

使用sscanf提取固定长度字符

sscanf(buffer, "+CREG:%d,%d,\"%4s\",\"%7s\"", &n, &stat, lac_buf, ci_buf);

提取IP地址

AT命令返回结果为:

+CIFSR:STAIP,"10.89.100.53"
+CIFSR:STAMAC,"dc:29:19:bb:d7:d3"
OK

使用sscanf提取数值类型:

sscanf(str + strlen("STAIP,"), "\"%d.%d.%d.%d\"", &seg1, &seg2, &seg3, &seg4);

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

sscanf(str, "STAIP,\"%d.%d.%d.%d\"", &seg1, &seg2, &seg3, &seg4);

提取MAC地址

AT命令返回结果为:

+CIFSR:STAIP,"10.89.100.53"
+CIFSR:STAMAC,"dc:29:19:bb:d7:d3"
OK

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

sscanf(str + strlen("STAMAC,"), "\"%2x:%2x:%2x:%2x:%2x:%2x\"", &seg1, &seg2, &seg3, &seg4,&seg5,&seg6);

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

AT命令返回结果为:

+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

strstr(buffer+offset, "+CWLAP:");

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

sscanf(str+strlen("+CWLAP:"), "(%d,\"%[^\"]\",%d,\"%[^\"]\",", &ecn, ssid, &rssi, mac);

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

while (*str++ != '\n') {
     offset++;
}

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:29:00  更:2021-09-22 14:29:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:51:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码