2017-06-21 70 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个元素。这将是最快的解决方案,无需任何转换或循环。