C 比较两个不同类型的数组

C 比较两个不同类型的数组,c,arrays,compare,C,Arrays,Compare,我想和数组进行比较。我的问题是,第一个数组是具有以下结构的数组:00d5ff4l(一个没有冒号的mac地址)。 第二个数组来自缓冲区。他的结构是00D5FF 41(十六进制) 我当前的代码如下所示 char mac[] = "00d5ff4l"; for (int i = 0; i < sizeof(mac); i++) { if (mac[i] != other_array[i]) { return 0; } else return

我想和数组进行比较。我的问题是,第一个数组是具有以下结构的数组:
00d5ff4l
(一个没有冒号的mac地址)。 第二个数组来自缓冲区。他的结构是
00D5FF 41
(十六进制)

我当前的代码如下所示

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

现在的问题是:mac的索引1是“0”,但对于其他数组,它是“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;
}
#包括
#包括
int compare_mac(){
字符mac[]=“00d5ff4l”;
char other_数组[]=“00:d5:ff:4l”;//也适用于“00D5 ff 4l”
int i=0;
int j=0;
//对于无效输入,尽早退出
如果(strlen(其他_阵列)-strlen(mac)!=3){
printf(“不相等”);
返回-1;
}
而(i

DiscalTimer:-
strncmp
需要两个非空指针。当访问超过任一数组的结尾时,行为未定义。当任一参数为空指针时,行为未定义。因此,如果您将字符数组作为函数的参数,请采取适当的安全措施

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

相关:不强制转换,但转换为类似格式。C不会自动为您执行此操作。如果此操作不起作用,则您必须编写自己的函数。如果“00”降为0,则“01:00:00”将降为“100”,您必须手动将其与“01:00”区分开来。请阅读并提供一个。不要写小说来解释你的代码(或者你认为你的代码做了什么)。比较“00d5ff4l”是否应该与“00D5FF41”匹配?(个案审议)