C语言strstr函数解析自定义协议参数

最近要实现一个基于ESP8266的配置和连接的功能,分别是用一个上位机发送协议信息,下位机对协议进行解析,所以字符串解析当然就是少不了的。
基于:https://blog.csdn.net/morixinguan/article/details/90520159
ESP8266配网思路,这篇文章作为开头。

一、协议规定

1、热点信息(字符串):

SSID=xxx;PASSWORD=xxxxxxx;

2、服务器与端口号(字符串):

SERVER_IP=xxx.xxx.xxx.xxx;PORT=xxx;

二、实现获取当前字符串在原字符串中的位置函数

//返回当前子串在原字符串中的索引 
int Sub_String_Index(char *str,char *sub_str)
{
	char *p1 = NULL ;
	char *__str = str ;
	char *__sub_str = sub_str ;
	p1 = strstr(__str,__sub_str);
	return  p1 - __str ;
}

三、整体测试验证

#include 
#include 
//定义一个信息存储结构体
typedef struct device_net_info
{
	char wifi_ssid[20];
	char wifi_password[20];	
	char server_ip[20];
	char server_port[10];
}WIFI_INFO;

WIFI_INFO wifi_info ;

//返回当前子串在原字符串中的索引 
int Sub_String_Index(char *str,char *sub_str)
{
	char *p1 = NULL ;
	char *__str = str ;
	char *__sub_str = sub_str ;
	p1 = strstr(__str,__sub_str);
	return  p1 - __str ;
}

int main(void) 
{
	int index1 = 0, index2 = 0; 
	char *p1 = NULL ;
	char *str = "SSID=602;PASSWORD=13602584536;";
	char *str1 = "SERVER_IP=120.78.136.134;PORT=9002;";
	//拷贝wifi ssid 
	index1 = Sub_String_Index(str,"=");
	index2 = Sub_String_Index(str,";");
	memcpy(wifi_info.wifi_ssid,str+index1+1,index2-index1-1);
	printf("ssid:%s\n",wifi_info.wifi_ssid);
	//拷贝wifi password==>从分号的位置的下一个开始拷贝数据 
	p1 = str+index2+1 ;
	index1 = Sub_String_Index(p1,"=") ;
	index2 = Sub_String_Index(p1,";") ;
	memcpy(wifi_info.wifi_password,p1+index1+1,index2-index1-1);
	printf("password:%s\n",wifi_info.wifi_password);
	//拷贝server_ip
	index1 = Sub_String_Index(str1,"=");
	index2 = Sub_String_Index(str1,";");
	memcpy(wifi_info.server_ip,str1+index1+1,index2-index1-1);
	printf("server_ip:%s\n",wifi_info.server_ip);
	//拷贝server_port 
	p1 = str1+index2+1 ;
	index1 = Sub_String_Index(p1,"=") ;
	index2 = Sub_String_Index(p1,";") ;
	memcpy(wifi_info.server_port,p1+index1+1,index2-index1-1);
	printf("server_port:%s\n",wifi_info.server_port);
	return 0 ;
}

运行结果:
C语言strstr函数解析自定义协议参数_第1张图片

你可能感兴趣的:(C语言-算法与数据结构编程)