首页 > 编程 > C > 正文

C语言根据协议分割获取字符串单元的实现代码

2020-01-26 13:37:23
字体:
来源:转载
供稿:网友

协议做如下规定:

规定数据协议:

序列号    长度   状态字   数据长度  数据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; } 

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对武林网的支持。如果你想了解更多相关内容请查看下面相关链接

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选