陣列比較
比較陣列比較的實用性
通常我們解通訊協定的封包時,習慣使用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 );
優缺點比較
第一種:優-命令短少時,可用。缺可維護性差,當封包越長越不好閱讀
第二種:優-擴充性高,彈性高。根據封包內容及動作撰寫
第三種:簡潔,方便維護,速度上有時候會比第二種慢
沒有留言:
發佈留言