C语言解析url

由于项目需要,我要用STM32处理手机发去的命令,格式是HTTP的get方法,如下:

192.168.16.160/?control=lamp&led=1&cl=6500&pr=1000&ms=0&al=1&tm=08.15&delay=60&$

就是说要把等于号后面的值都解析出来,在网上没找到比较满意的做法,于是自己写了一个函数来做解析。

/************************************************************
需要解析的url如下:
192.168.16.160/?control=lamp&led=1&cl=6500&pr=1000&ms=0&al=1&tm=08.15&delay=60&$
在代码里面默认已经将其存储在了  net_data.net_buff  里面

************************************************************/
char *get_net_info(char *info_name){
  //以一个字段为例 :   control=lamp&(整条信息)   输入 control   输出 lamp
  
  char endFlag ='&';    				        // 整条信息的结束符号
  char *startAdd= NULL;         				// 整条信息的起始地址
  char *endAdd= NULL;           				// 整条信息的结束地址
  int  offsetLen;				  				// 键的偏移量(control=)
  
  char *conclusionStartAdd= NULL;               // 所需信息的起始地址
  int  conclusionLen;					 			    // 所需信息的长度
  char conclusion[8]="";					 	// 函数的返回值
  char *conclusion1= NULL;                      // 辅助的指针
	

  conclusion1=conclusion;                       // 把返回值的地址给辅助指针
  
  startAdd = strstr((const char*)net_data.net_buff,info_name);       // 获得整条信息的起始地址  即c的地址
  offsetLen = strlen(info_name)+1;                                   //获得键的偏移量         “control=”  地址增加8
  endAdd = strchr(startAdd+offsetLen, endFlag);                      // 获得整条信息的结束地址     即&的地址
  
  conclusionLen=endAdd-startAdd-offsetLen;                                 //获得所需信息的长度      &的地址-c的地址-键的偏移量=4
  conclusionStartAdd=startAdd+offsetLen;                             //获得所需信息的起始地址    lamp里面l的地址
  conclusion1=strncpy(conclusion,conclusionStartAdd,conclusionLen);        //获得最终的函数返回值

  return  conclusion1;
}



//在主函数中调用的时候:

int main(void){

    char  control_name[8]="";
    char *control_name1=NULL;
  
  	control_name1=get_net_info("control");    //输入  control
	*control_name=*strcpy(control_name,control_name1);
	printf("control_name: %s \r\n ",control_name); //输出  lamp

}



本人c语言基础不是太好,对数组和指针的理解也不够,所以用到了 char *conclusion1= NULL; 和 char *control_name1=NULL;这两个辅助的指针来完成这个功能。

比如再写一句
delay_name1=get_net_info("delay");
就能得到delay这个键的值 60







猜你喜欢

转载自blog.csdn.net/fuzhang_android/article/details/44977691