C语言数组按协议存储与按协议解析数据的实现

2020-01-06 19:46:50于海丽

协议需求:

  • (1)序列号(1个字节) 属性(1个字节) 名称(18个字节)
  • (2)现有一块空间为600个字节,以20个字节为单位,分别存储以上数据,直到存满为止,并能解析。

    根据协议,我们可以设计一个结构体来表述这些数据:

    
    struct Data_Info
    {
     char serial_num ;  //序列号 
     char property ;  //属性 
     char sample_name[18]; //分类名称 
    };

    恰恰在做嵌入式开发或者有关协议的开发就会要求类似这样的需求,我们可以写一个简单的C程序模拟一下这个过程:

    首先,模拟一堆已经定义好的数据,用来表示Data_Info里的分类名称:

    
    char *name[] = 
    {
     "水果",
     "蔬菜",
     "啤酒",
     "酒精",
     "柴油",
     "娃哈哈",
     "奶茶",
     "雪碧",
     "可乐",
     "硫酸",
     "盐酸",
     "硝酸" 
    };

    接下来,写一个函数,用于随机初始化一块600个字节的内存空间,初始化600个字节中,以每20个字节为单位,分别按协议的要求初始化序列号、属性、名称。

    
    //创建样本库数据 
    void Create_Simple_Data(char *_data)
    {
     int i ;
     int count_num = 1 ;
     for(i = 0 ; i < 600 ; i++)
     {
     if(i % 20 == 0)
     {
      _data[i] = count_num ;
      _data[i+1] = rand()%2 ;
      memcpy(_data+i+2,name[rand()%7],18);
      count_num++ ;
     } 
     }
    }

    输出数据的函数,用于输出600个字节里的数据,按协议进行解析。