91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數組int2str實現按協議存儲與按協議解析數據

發布時間:2021-08-06 14:18:07 來源:億速云 閱讀:160 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關C語言數組int2str實現按協議存儲與按協議解析數據的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

協議需求:

  • (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個字節里的數據,按協議進行解析。

//輸出樣本庫信息 
void Put_Simple_Data(char *_data)
{
 int offset_start = 0 , count = 0 , end_position = 0 ;
 int end_position_save = 0 ;
 int count_number = 0 ;
 count_number = 0 ;
 for(offset_start = 0 , count = 0 ; \
 offset_start < 600 ;  \
 offset_start++ ,count++) \
 {
  //每20個字節為單位
  if(count == 20)
  { 
  //1.記錄起始地址
  end_position = offset_start ;
  //2.以20個字節作為分割點,分割數據 
  sample_data_info[count_number].serial_num = _data[end_position-20] ;  //20*n+0為庫的編號
  sample_data_info[count_number].property  = _data[end_position-19] ;  //20*n+1為庫的屬性
  memset(sample_data_info[count_number].sample_name,0,18);    
  memcpy(sample_data_info[count_number].sample_name,(_data+2)+(20*count_number),18); //20*n+2....20*n+2+18為庫的名稱 
  printf("編號:%d  屬性:%d  名稱:%s\n",sample_data_info[count_number].serial_num,sample_data_info[count_number].property,sample_data_info[count_number].sample_name);
  //記錄有多少個20
  count_number++ ;
  //將當前的計數清0 
  count = 0 ;  
  }
 }
}

主函數中,主要工作是開辟一塊600字節的內存空間用于存儲,并調用以上的函數實現功能:

int main (void) 
{
 char *_data = NULL ;
 _data = malloc(600);
 Create_Simple_Data(_data);
 Put_Simple_Data(_data);
 free(_data);
 _data = NULL ;
  return 0;
}

運行結果:

C語言數組int2str實現按協議存儲與按協議解析數據

在內存足夠大的情況下,這無疑是非常好的方法,既簡單又粗暴,但在單片機的程序上,可能無法一次性分配如此大的,比如Ucos,一個棧的分配有限,現在,又如何來實現這樣的協議呢?不建議把棧改大,因為單片機沒有虛擬內存管理機制,如果當前的任務改大了,其余的也就相對的要變小了。

感謝各位的閱讀!關于“C語言數組int2str實現按協議存儲與按協議解析數據”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳高县| 峡江县| 当雄县| 前郭尔| 梁平县| 顺平县| 青岛市| 阿荣旗| 克东县| 谢通门县| 镇沅| 车致| 泸水县| 会东县| 三亚市| 弥勒县| 洪湖市| 响水县| 沧州市| 社旗县| 丹阳市| 博爱县| 邵阳市| 佛坪县| 大石桥市| 菏泽市| 广西| 长丰县| 望城县| 广平县| 湖口县| 广丰县| 松江区| 苍梧县| 华坪县| 金阳县| 瓮安县| 信丰县| 平安县| 社旗县| 平邑县|