2019年3月29日星期五

陣列

陣列比較


比較陣列比較的實用性

通常我們解通訊協定的封包時,習慣使用if或是for迴圈比較陣列資料內容,判斷是不是設備需要的命令。舉例來說如果使用Modbus ASCII的通訊格式,命令如下

確認設備狀況:0x3A,0x00,0x01,0x00,0x00,0x00{LRC},0x0D,0x0A
請求發送資料:0x3A,0x00,0x01,0x03,0x00,0x00{LRC},0x0D,0x0A

當設備收到固定長度的資料要進行比較,通常會有以下寫法

第一種
if(mydata[0]==0x3A && mydata[1]==0x01 && mydata[2]==0x03 && mydata[3]==0x04 && mydata[4]==0x05 && mydata[5]==0x06 && mydata[6]==0x07 && mydata[7]==0x08)
欲執行的動作

第二種

    bool check_array(int array_length){
     for(int i = 0; i < array_length; i++)
      {
        if (mydata[i]==cmd_check[i]) {
            count++
        }
      }
        if (count==7) {
         return true;
        }
        else{
        return false;
        }
    }
第三種
memcmp( mydata, cmd_check, 8 );


優缺點比較

第一種:優-命令短少時,可用。缺可維護性差,當封包越長越不好閱讀
第二種:優-擴充性高,彈性高。根據封包內容及動作撰寫
第三種:簡潔,方便維護,速度上有時候會比第二種慢

沒有留言:

發佈留言

打賞按讚