问题描述
对于AT命令的回复,是一个字符串,如果处理该字符串,每次收到字符串都处理一次非常的麻烦,写一个函数来处理AT命令,能大大减少这种麻烦。
函数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27/* * 取两个分隔符之间的子串 * str 原始字符串 * separator1 第一个分隔符 * separator2 第二个分隔符 * num 字符串出现几次时,作为第一个分隔符的位置。 * substr 取出的两个分隔符间的子串,从0起数。"+QMTRECV: 0,0,"Hello",hello world" */ uint8_t get_sub_str(char * str,char * separator1,char * separator2,int8_t num, char * substr) { int8_t i; char *p1,*p2; p1 = str; for(i = 0; i<=num; i++) { p1 = strstr(p1,separator1); if(p1 == NULL) return 1; p1++; } p2 = strstr(p1,separator2); if(p2 == NULL) return 2; memcpy(substr,p1,p2-p1); return 0; }
将AT命令返回的字符串赋给str,取两个分隔符之间的子串,将该子串放到substr中返回,num是从第几个该分隔符开始取,可以减下边例子。
使用例子解析
例如收到如下的一个字符串:
复制代码
1
2"+QMTRECV: 0,0,"Hello",hello world"
char conn_id[3]={0},msg_id[3] = {0},topic[100]={0},data[256]={0};
下:从第0个冒号开始取,去冒号和,号之间的子串,就是链接id。
get_sub_str((char *)dataPtr,": ",",",0,conn_id);
下:从第0个逗号开始取,取到下一个逗号,就是msg id。
get_sub_str((char *)dataPtr,",",",",0,msg_id);
下:取第一个逗号,和下一个逗号之间的内容就是topic。
get_sub_str((char *)dataPtr,",",",",1,topic);
下:取逗号和换行符之间的字符,就是data的内容。
get_sub_str((char *)dataPtr,",","rn",2,data);
下:最后将字符串划分开取到的子串内容打印出来。
复制代码
1
2
3printf("conn_id:%s,msg_id:%s,topic:%s, data:%srn",conn_id,msg_id,topic,data);
最后
以上就是鲤鱼朋友最近收集整理的关于一个AT命令处理小函数的全部内容,更多相关一个AT命令处理小函数内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复