字符串的解析与拼接(C语言实现)

简介

最近大半年在搞一个基于NB的物联网项目,里面涉及到NB模组到移动ONENET平台的接入,整个过程需要不断发送AT指令到NB,从返回信息里解析相关参数再放入到下一条指令里面,这里以onenet平台下发数据介绍下字符串的处理方法
字符串的解析与拼接(C语言实现)_第1张图片

如图,当平台下发数据123时,mcu收到字符串+MIPLWRITE: 0,18960,3200,0,5750,2,3,313233,0,0,按照接入协议,我需要在10s内将信息ID"18960"解析出来并放入到下一条AT指令做下发响应,即指令AT+MIPLWRITERSP=0,18960,2,

相关代码

char write_rsp[40]={0};                  //(0)
void RspAnalyseStr(char str[])           //(1)
{
   char* down_write_ID=NULL;             //(2)
   char* str1 = str;            
   char substr[15] = "+MIPLWRITE: 0,";   //(3)
   char* add1 = strstr(str1,substr);     //(4)   
   char cut[] = ",";                    //(5)以','作为分割字符
   if(add1 != NULL)                     //(6)
   {	 
	    down_write_ID=strtok(add1+14,cut); //(7)
		sprintf(write_rsp,"%s%s%s","AT+MIPLWRITERSP=0,",down_write_ID,",2");   //(8)
		printf("%s\r",write_rsp);    //(9)
   }
  
}

逐句解释
(0)定义一个字符数组用于存储数据下发回复消息
(1)函数参数代表的是将存储返回信息的数组作为参数传进来
(2)定义一个指针
(3)定义一个字符串数组,存储字符串
(4)函数strstr()判断substr是不是str1的字串,如果是则返回子串第一次出现的地址,如果不是返回NULL
(5)定义逗号为分割字符
(6)如果不等于NULL则substr是str1的子串
(7)函数strtok()用于分割从add1+14开始的字符串(将分隔符出现的位置变为\0),第一次调用返回第一个分割字符串的地址,第二次调用strtok,第一个参数放NULL,返回的是第二个分割字符串地址(以后第一个参数都写NULL)
(8)将相关字符串通过sprintf打印到缓存区write_rsp,实现字符串拼接
(9)上报回复信息

你可能感兴趣的:(STM32应用系列)