協議做如下規定:
規定數據協議:
序列號 長度 狀態字 數據長度 數據1 數據2 數據3
以空格作為數據單元。
ep:
00001 00007 1 3 34567 26358 32698 (1) (2) (3)(4) (5) (6) (7)
如ep所示:
(1)00001就是數字1,即代表序列號為1 (2)00007就是數字7,即代表長度為7 (3)1代表狀態字 (4)3代表數字長度 (5)34567代表數據1 (6)26358代表數據2 (7)32698代表數據3
這樣就找到規律了,假設數據都為整型或者負整型,我們就可以來實現以下代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//根據空格拆分字符串
int partition(char *src, char *par, int pos)
{
int i,j;
i = pos;
//取得一個非空字符
while(src[i] == ' ')
++i;
if(src[i] != '\0')
{
j = 0;
while((src[i] != '\0') && (src[i] != ' '))
{
//判斷條件是否滿足
if((src[i] > '9') || (src[i] < '0') && (src[i] != '-'))
return -1 ;
par[j] = src[i];
++i;
++j;
}
par[j]='\0';
return i;
}
else
return -1;
}
int main(void)
{
int serial_number ;
int lenght ;
int status ;
int data_length;
int data1,data2,data3;
int position = 0;
int para_flag = 1 ;
int parameter_item = 0;
char partition_string[20] = {0};
char *data = "00001 00007 1 3 34567 26358 32698";
while(para_flag)
{
if(para_flag == 0)
break ;
if((position = partition(data,partition_string,position)) != -1)
{
++parameter_item ;
switch(parameter_item)
{
case 1:
serial_number = atoi(partition_string);
break ;
case 2:
lenght = atoi(partition_string);
break ;
case 3:
status = atoi(partition_string);
break ;
case 4:
data_length = atoi(partition_string);
break ;
case 5:
data1 = atoi(partition_string);
break ;
case 6:
data2 = atoi(partition_string);
break ;
case 7:
data3 = atoi(partition_string);
para_flag = 0 ;
break ;
}
}
}
printf("序號:%d\n",serial_number);
printf("長度:%d\n",lenght);
printf("狀態字:%d\n",status);
printf("數據長度:%d\n",data_length);
printf("數據1:%d\n",data1);
printf("數據2:%d\n",data2);
printf("數據3:%d\n",data3);
return 0;
}
運行結果:

總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。