如何验证字符串是否是C中的有效MAC地址?

-1 c mac-address

例:

12:45:ff:ab:aa:cd    is valid
45:jj:jj:kk:ui>cd    is not valid

Dan*_*ger 8

以下代码检查有效的MAC地址(使用或不使用":"分隔符):

#include <ctype.h>

int isValidMacAddress(const char* mac) {
    int i = 0;
    int s = 0;

    while (*mac) {
       if (isxdigit(*mac)) {
          i++;
       }
       else if (*mac == ':' || *mac == '-') {

          if (i == 0 || i / 2 - 1 != s)
            break;

          ++s;
       }
       else {
           s = -1;
       }


       ++mac;
    }

    return (i == 12 && (s == 5 || s == 0));
}
Run Code Online (Sandbox Code Playgroud)

代码检查以下内容:

  • 输入字符串mac恰好包含12个十六进制数字.
  • 如果:输入字符串中出现分隔符冒号,则它仅出现在偶数个十六进制数字之后.

它的工作原理如下:

  • i,其中的十六进制数字的数字mac,被初始化为0.
  • while超过在输入字符串的每一个字符的循环,直到该字符串结尾,或已经检测到12个十六进制数字.
    • 如果当前字符(*mac)是有效的十六进制数字,则i递增,循环检查下一个字符.
    • 否则,循环检查当前字符是否为分隔符(冒号或破折号); 如果是,则验证每对十六进制数字都有一个分隔符.否则,循环中止.
  • 循环结束后,该函数检查是否找到12个十六进制数字,以及零或五个分隔符,并返回结果.

如果您不想接受分隔符,只需将return语句更改为:

return (i == 12 && s == 0);
Run Code Online (Sandbox Code Playgroud)