一个AT命令处理小函数

问题描述

对于AT命令的回复,是一个字符串,如果处理该字符串,每次收到字符串都处理一次非常的麻烦,写一个函数来处理AT命令,能大大减少这种麻烦。

函数

/*
* 取两个分隔符之间的子串
* 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是从第几个该分隔符开始取,可以减下边例子。
使用例子解析
例如收到如下的一个字符串:

"+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,",","\r\n",2,data);
下:最后将字符串划分开取到的子串内容打印出来。

printf("conn_id:%s,msg_id:%s,topic:%s,
     data:%s\r\n",conn_id,msg_id,topic,data);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值