【问题标题】:compare two arrays of different types比较两个不同类型的数组
【发布时间】:2017-06-21 19:09:45
【问题描述】:

我想与数组进行比较。我的问题是,第一个数组是一个具有这种结构的数组: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”。所以它永远不会以这种方式匹配。我必须投其中一个吗?如果是,怎么做?

【问题讨论】:

  • 不转换但转换为可比较的格式。 C 不会自动为你做这件事。
  • 如果这不起作用,那么您将不得不编写自己的函数。如果“00”下降到 0,那么“01:00:00”将下降到“100”,您必须手动将其与“01:00”区分开来。
  • 阅读How to Ask 并提供minimal reproducible example。不要写小说来解释你的代码(或者你认为你的代码做了什么)。
  • 比较“00d5ff4l”是否应该匹配“00 D5 FF 41”? (案例考虑)

标签: c arrays compare


【解决方案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 个非空指针。当访问发生在任一数组的末尾之后,行为是未定义的。当任一参数为空指针时,行为未定义。因此,如果您将 char 数组作为函数的参数使用,请采取足够的安全措施

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2014-11-12
      • 2020-10-12
      • 2019-08-18
      相关资源
      最近更新 更多