前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言strstr函数解析自定义协议参数

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

作者头像
杨源鑫
发布2019-07-04 17:33:39
1.1K0
发布2019-07-04 17:33:39
举报
文章被收录于专栏:嵌入式开发圈
最近要实现一个基于ESP8266的配置和连接的功能,分别是用一个上位机发送协议信息,下位机(ESP8266)对协议进行解析,所以字符串解析当然就是少不了的。

一、协议规定

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

SSID=xxx;PASSWORD=xxxxxxx;

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

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

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

代码语言:javascript
复制
1//返回当前子串在原字符串中的索引 
2int Sub_String_Index(char *str,char *sub_str)
3{
4    char *p1 = NULL ;
5    char *__str = str ;
6    char *__sub_str = sub_str ;
7    p1 = strstr(__str,__sub_str);
8    return  p1 - __str ;
9}

三、整体测试验证

代码语言:javascript
复制
1#include <stdio.h>
 2#include <string.h>
 3//定义一个信息存储结构体
 4typedef struct device_net_info
 5{
 6    char wifi_ssid[20];
 7    char wifi_password[20]; 
 8    char server_ip[20];
 9    char server_port[10];
10}WIFI_INFO;
11
12WIFI_INFO wifi_info ;
13
14//返回当前子串在原字符串中的索引 
15int Sub_String_Index(char *str,char *sub_str)
16{
17    char *p1 = NULL ;
18    char *__str = str ;
19    char *__sub_str = sub_str ;
20    p1 = strstr(__str,__sub_str);
21    return  p1 - __str ;
22}
23
24int main(void) 
25{
26    int index1 = 0, index2 = 0; 
27    char *p1 = NULL ;
28    char *str = "SSID=602;PASSWORD=13602584536;";
29    char *str1 = "SERVER_IP=120.78.136.134;PORT=9002;";
30    //拷贝wifi ssid 
31    index1 = Sub_String_Index(str,"=");
32    index2 = Sub_String_Index(str,";");
33    memcpy(wifi_info.wifi_ssid,str+index1+1,index2-index1-1);
34    printf("ssid:%s\n",wifi_info.wifi_ssid);
35    //拷贝wifi password==>从分号的位置的下一个开始拷贝数据 
36    p1 = str+index2+1 ;
37    index1 = Sub_String_Index(p1,"=") ;
38    index2 = Sub_String_Index(p1,";") ;
39    memcpy(wifi_info.wifi_password,p1+index1+1,index2-index1-1);
40    printf("password:%s\n",wifi_info.wifi_password);
41    //拷贝server_ip
42    index1 = Sub_String_Index(str1,"=");
43    index2 = Sub_String_Index(str1,";");
44    memcpy(wifi_info.server_ip,str1+index1+1,index2-index1-1);
45    printf("server_ip:%s\n",wifi_info.server_ip);
46    //拷贝server_port 
47    p1 = str1+index2+1 ;
48    index1 = Sub_String_Index(p1,"=") ;
49    index2 = Sub_String_Index(p1,";") ;
50    memcpy(wifi_info.server_port,p1+index1+1,index2-index1-1);
51    printf("server_port:%s\n",wifi_info.server_port);
52    return 0 ;
53}

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式开发圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档