亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  C語言 | 如何使用 sscanf 提取AT命令返回結果中的有效數據

C語言 | 如何使用 sscanf 提取AT命令返回結果中的有效數據

時間:2024-02-08

擊上方“程序員小哈”,選擇“星標公眾號

干貨福利,第一時間送達!

1. sscanf函數

sscanf是C標準庫函數,用于「從字符串中讀取格式化輸入」

頭文件:

#include <stdio.h>

函數原型如下:

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

函數返回值:「返回成功讀取的數量」

2. 使用實例

提取信號強度

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++;
}
------------ END ------------

歡迎關注我的公眾號回復“加群”按規則加入技術交流群。


→點關注,不迷路←

分享 ????  點贊 ????  在看 ?? 

以“三連”行動支持優質內容!

“閱讀原文”了解小哈哥的知識星球,
我們一起成長


主站蜘蛛池模板: 固镇县| 教育| 武义县| 洛川县| 舞阳县| 乃东县| 肥城市| 大港区| 抚州市| 遵义市| 荃湾区| 宝坻区| 南岸区| 黄骅市| 奈曼旗| 育儿| 陵川县| 灌云县| 长乐市| 北安市| 噶尔县| 安岳县| 德州市| 桂东县| 三河市| 徐闻县| 和硕县| 炉霍县| 淄博市| 海淀区| 梧州市| 天峨县| 两当县| 尤溪县| 泗阳县| 永州市| 阿拉善右旗| 湾仔区| 陵水| 自贡市| 丹凤县|