2017-06-21 65 views
1

我想比較數組。我的問題是,第一個數組是這種結構的數組:00d5ff4l(不帶冒號的mac地址)。 第二個數組來自緩衝區。他的結構00 d5 ff 41(十六進制)比較不同類型的兩個數組

我當前的代碼看起來像這樣

char mac[] = "00d5ff4l"; 
for (int i = 0; i < sizeof(mac); i++) { 
    if (mac[i] != other_array[i]) { 
     return 0; 
    } 
    else 
     return 1; 
} 

現在是以下問題:指數MAC 1是「0」,但對於other_array它的「00」。所以它永遠不會以這種方式匹配。我是否必須演員其中之一?如果是,如何?

+0

相關:https://stackoverflow.com/questions/3408706/hexadecimal-string-to-byte-array-in-c – Caramiriel

+1

未投射,但轉換爲可比較的格式。 C不會自動爲你做。 –

+0

如果這不起作用,那麼你將不得不編寫自己的函數。如果「00」下降到0,那麼「01:00:00」將下降到「100」,您必須手動將其與「01:00」區分開來。 – Alex

回答

1

這裏有一個小的工作效用函數您使用strncmp

#include <stdio.h> 
#include <string.h> 

int compare_mac() { 
    char mac[] = "00d5ff4l";  
    char other_array[] = "00:d5:ff:4l"; //Will work for "00 d5 ff 4l" as well 
    int i = 0; 
    int j = 0; 

    //Bail out early for invalid inputs 
    if(strlen(other_array) - strlen(mac) !=3){ 
     printf("Not Equal"); 
     return -1;   
    } 

    while(i < strlen(mac)){ 
     if(strncmp(mac+i, other_array+j,2) !=0){ 
      printf("Not Equal"); 
      return -1; 
     } 
     i=i+2; 
     j=j+3; 
    } 
    printf("Equal MAC IDs"); 

    return 0; 
} 

Discalaimer爲: - strncmp需要2個非空指針。當訪問發生在任一數組的末尾時,行爲是不確定的。當param是空指針時,行爲是未定義的。因此,如果你正在採取適當的安全措施,如在參數函數

0

作爲參數我建議只使用if語句,數組中的8個元素。這將是最快的解決方案,無需任何轉換或循環。