比较两个不同类型的数组

标签 c arrays compare

我想比较数组。我的问题是,第一个数组是具有以下结构的数组:00d5ff4l(不带冒号的 mac 地址)。 第二个数组来自缓冲区。他的结构是00 d5 ff 41 (Hex)

我现在的代码是这样的

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”。所以它永远不会以这种方式匹配。我必须投其中之一吗?如果是,如何?

最佳答案

这里有一个使用 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;
}

免责声明:- strncmp 需要 2 个非空指针。当访问发生在任一数组末尾之后时,行为未定义。当任一参数为空指针时,行为未定义。因此,如果您将 char 数组用作函数的参数,请采取足够的安全措施

关于比较两个不同类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684410/

相关文章:

c# - 在 C# 中将 List<string> 转换为 DataRow

arrays - TypoScript:如果为空则覆盖 COA

php - 如何比较两个学说对象?

无法将用户输入保存到变量中

无法理解结构初始化

c++ - 在 C/C++ 中是否有类似极度优化的 memcpy2d 之类的东西?

c - 关于宏

arrays - 在Ruby中汇总数组元素

C#比较2个字符串,排序,放入数组

c# - .Net 中的字符串比较 : "+" vs "-"