我想与数组进行比较。我的问题是,第一个数组是具有以下结构的数组: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"。所以它永远不会以这种方式匹配。我必须投出其中一个吗?如果是,如何?
一个小的工作实用程序函数,供您使用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 个非空指针。当访问发生在任一数组的末尾时,行为是未定义的。当任一参数为空指针时,行为是未定义的。因此,如果您要将字符数组作为函数的参数,请采取足够的安全措施
我建议只使用 if 语句,因为 mac 地址几年内不会改变((只需为数组中的所有 8 个元素创建 if(( 条件。这将是最快的解决方案,无需任何转换或循环。