比较两个不同类型的数组

时间:2017-06-21 19:09:46

标签: c arrays compare

我想与数组进行比较。我的问题是,第一个数组是一个具有这种结构的数组:map(没有冒号的mac-address)。 第二个数组来自缓冲区。他的结构是00d5ff4l(十六进制)

我目前的代码如下所示

00 d5 ff 41

现在的问题如下:mac的索引1为'0',但对于other_array,它为'00'。所以它永远不会以这种方式匹配。我必须投出其中一个吗?如果是,怎么样?

2 个答案:

答案 0 :(得分: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是空指针时,行为是未定义的。因此,如果您将char数组作为函数的参数使用,那么应采取足够的安全措施

答案 1 :(得分:0)

我建议只使用if语句,因为几年后mac地址不会改变)) 只需为数组中的所有8个元素创建if()条件。它将是没有任何转换或循环的最快解决方案。