源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

基于C语言指令的深入分析

  • 时间:2021-02-24 00:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:基于C语言指令的深入分析
这虽然只是指令解析的一部分,但这是最[b]核心部分[/b]。完整指令为:AT+REG[admin][2][00:0C:29:AA:0B:A7]。 /****************************************************************  **文件:GetParameters.c  **简要描述:指令解析  **注:1.这种情况下“AT+ABC[ha12ha[1122]”--即中间少了一个], 则解析的结果为ha12ha[1122。         2.默认参数的大小不超过20字节         3.最多解析三个参数。         4.指令结尾必须为空即'\0'或'\n'。  ***************************************************************/  
[u]复制代码[/u] 代码如下:
#include <stdio.h> #include <string.h> //保存参数的结构体 typedef struct parameters {  char str1[20];  //第一个参数  char str2[20];  //第二个参数  char str3[20];  //第三个参数 }parameters_t;   [b]/***** 获取参数 **********************************************/ //返回值为获取参数的个数,-1表示指令错误 int Getparams(char* data, parameters_t* pparam)[/b] {  int len = 0;  memset(pparam, 0, sizeof(parameters_t)); [b] //第一个参数[/b]  {  [b]//如果为空或换行,则说明没有参数[/b]   if( 0 == *data || '\n' == *data)   {    _ERROR("no parameter!");    return 0;   }  [b]//如果为'['字符,则说明后面还有参数[/b]   if( strncmp(data, "[", 1) )   {    _ERROR("first parameter err:  can't find '['");    return -1;   }   data += 1;  [b] //如果'['后有']'结束字符,则说明参数有效[/b]   if( !strstr(data, "]") )   {    _ERROR("first parameter err:  can't find ']'");    return -1;   }  [b] //得到第一个参数的长度[/b]   len = strstr(data, "]") - data;   if(20 <= len)   {    _ERROR("param one is too long!");    return -1;   }  [b] //得到第一个参数[/b]   strncpy(pparam->str1, data, len);   //printf("str1 : %s\n", pparam->str1);  }  [b]//第二个参数[/b]  {   data += (len + 1);  [b] //如果为空,则说明只有一个参数[/b]   if( 0 == *data || '\n' == *data)   {    //printf("only one parameter!\n");    return 1;   }  [b]//如果为'['字符,则说明后面还有参数[/b]   if( strncmp(data, "[", 1) )   {    _ERROR("second parameter err:  can't find '['");    return -1;   }   data += 1;  [b]//如果'['后有']'结束字符,则说明参数有效[/b]   if( !strstr(data, "]") )   {    _ERROR("second parameter err:  can't find ']'");    return -1;   }   len = strstr(data, "]") - data;   if(20 <= len)   {    _ERROR("param two is too long!");    return -1;   }   [b] //得到第二个参数[/b]   strncpy(pparam->str2, data, len);   //printf("str2 : %s\n", pparam->str2);  } [b] //第三个参数[/b]  {   data += (len + 1);   if( 0 == *data || '\n' == *data)   {    //printf("only two parameter!\n");    return 2;   }   if( strncmp(data, "[", 1) )   {    _ERROR("third parameter err:  can't find '['");    return -1;   }   data += 1;   if( !strstr(data, "]") )   {    _ERROR("third parameter err:  can't find ']'");    return -1;   }   len = strstr(data, "]") - data;   if(20 <= len)   {    _ERROR("param three is too long!");    return -1;   }    strncpy(pparam->str3, data, len);   //printf("str3 : %s\n", pparam->str3);  }  data += (len + 1);  if( 0 != *data && '\n' != *data)  {   _ERROR("too much parameter!");   return -1;  }   return 3; }  
[b]这就是指令(字符串)解析,目的是获取参数.[/b]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部