為了方便各位小伙伴們更好的學(xué)習(xí)C語言,今天武林技術(shù)頻道的小編專門為大家整理了一些資料,供大家交流學(xué)習(xí),下面就跟隨武林技術(shù)頻道的編輯一起來看看解析基于C語言的指令吧。
這雖然只是指令解析的一部分,但這是最核心部分。完整指令為:AT+REG[admin][2][00:0C:29:AA:0B:A7]。
/****************************************************************
?**文件:GetParameters.c
?**簡(jiǎn)要描述:指令解析
?**注:1.這種情況下“AT+ABC[ha12ha[1122]”--即中間少了一個(gè)], 則解析的結(jié)果為ha12ha[1122。
??????? 2.默認(rèn)參數(shù)的大小不超過20字節(jié)
??????? 3.最多解析三個(gè)參數(shù)。
??????? 4.指令結(jié)尾必須為空即'/0'或'/n'。
?***************************************************************/
?
復(fù)制代碼 代碼如下:
#include
#include
//保存參數(shù)的結(jié)構(gòu)體
typedef struct parameters
{
?char str1[20];? //第一個(gè)參數(shù)
?char str2[20];? //第二個(gè)參數(shù)
?char str3[20];? //第三個(gè)參數(shù)
}parameters_t;
?
/***** 獲取參數(shù) **********************************************/
//返回值為獲取參數(shù)的個(gè)數(shù),-1表示指令錯(cuò)誤
int Getparams(char* data, parameters_t* pparam)
{
?int len = 0;
?memset(pparam, 0, sizeof(parameters_t));
?//第一個(gè)參數(shù)
?{
? //如果為空或換行,則說明沒有參數(shù)
? if( 0 == *data || '/n' == *data)
? {
?? _ERROR("no parameter!");
?? return 0;
? }
? //如果為'['字符,則說明后面還有參數(shù)
? if( strncmp(data, "[", 1) )
? {
?? _ERROR("first parameter err:? can't find '['");
?? return -1;
? }
? data += 1;
? //如果'['后有']'結(jié)束字符,則說明參數(shù)有效
? if( !strstr(data, "]") )
? {
?? _ERROR("first parameter err:? can't find ']'");
?? return -1;
? }
? //得到第一個(gè)參數(shù)的長(zhǎng)度
? len = strstr(data, "]") - data;
? if(20 <= len)
? {
?? _ERROR("param one is too long!");
?? return -1;
? }
? //得到第一個(gè)參數(shù)
? strncpy(pparam->str1, data, len);
? //printf("str1 : %s/n", pparam->str1);
?}
?//第二個(gè)參數(shù)
?{
? data += (len + 1);
? //如果為空,則說明只有一個(gè)參數(shù)
? if( 0 == *data || '/n' == *data)
? {
?? //printf("only one parameter!/n");
?? return 1;
? }
? //如果為'['字符,則說明后面還有參數(shù)
? if( strncmp(data, "[", 1) )
? {
?? _ERROR("second parameter err:? can't find '['");
?? return -1;
? }
? data += 1;
? //如果'['后有']'結(jié)束字符,則說明參數(shù)有效
? 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;
? }?
? //得到第二個(gè)參數(shù)
? strncpy(pparam->str2, data, len);
? //printf("str2 : %s/n", pparam->str2);
?}
?//第三個(gè)參數(shù)
?{
? 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;
}
?
這就是指令(字符串)解析,目的是獲取參數(shù).。更多精彩內(nèi)容,盡在https://js.Vevb.com。