mac address 的一些操作

1、如何描述 MAC地址

最常用的有两种:

1、字符串

char *addr="52:54:00:29:e4:4b";  // 长度17,有效值都是16进制表示的

2、数组

/* MAC Address */
typedef struct {
        uint8_t b[6];
} __attribute__((packed)) macaddr_t;

2、如何检测输入的mac地址是有效的?

// 这里参考了bluez的源码

int mac_check(const char *str)
{
        if (!str)
                return -1;

        if (strlen(str) != 17)
                return -1;

        while (*str) {
                if (!isxdigit(*str++))
                        return -1;

                if (!isxdigit(*str++))
                        return -1;

                if (*str == 0)
                        break;

                if (*str++ != ':')
                        return -1;
        }

        return 0;
}

注 :int isxdigit(int c); 是一个标准C库函数,头文件在 ctype.h,用来判断传入的字符是不是十六进制的字符。我们知道十六进制一般用数字 0 到 9 和字母 A 到 F(或 a~f)表示,其中 A~F 表示 10~15: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F。如果不是,isxdigit 返回0。

3、两种MAC地址表示方法的转换

int ba2str(const macaddr_t *ba, char *str)
{
        return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
                ba->b[5], ba->b[4], ba->b[3], ba->b[2], ba->b[1], ba->b[0]);
}

int str2ba(const char *str, macaddr_t *ba)
{
        int i;

        if (mac_check(str) < 0) {
                memset(ba, 0, sizeof(*ba));
                return -1;
        }

        for (i = 5; i >= 0; i--, str += 3)
                ba->b[i] = strtol(str, NULL, 16);

        return 0;
}

 long int strtol(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值