擊上方“程序員小哈”,選擇“星標公眾號”
干貨福利,第一時間送達!
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++;
}
分享 ???? 點贊 ???? 在看 ??
以“三連”行動支持優質內容!

