mac地址自增

来源:互联网 发布:unity3d象棋素材 编辑:程序博客网 时间:2024/06/10 06:27
mac地址又叫硬件地址,占用6个字节的空间,一般采用16进制并以冒号分割各个字节的方式表示。在32位的机器中,一般long型占4个字节,long long占8个字节,因此,我们可以将mac地址存储在long long的内存空间中,然后对其做加一运算。

代码如下:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char **argv){    char mac[] = "00:0C:29:54:E2:F4";    long long mac_space = 0;    int i = 0, count = strlen(mac);    if(sizeof(long long) < 6)    {        printf("long long is too short\n");        return -1;    }    while(1)    {        for(i = 0, mac_space = 0; i < strlen(mac); i++)        {            if(mac[i] >= '0' && mac[i] <= '9')            {                mac_space = mac_space << 4;                mac_space += mac[i] - '0';            }            else if(mac[i] >= 'a' && mac[i] <= 'f')            {                mac_space = mac_space << 4;                mac_space += mac[i] - 'a' + 10;            }            else if(mac[i] >= 'A' && mac[i] <= 'F')            {                mac_space = mac_space << 4;                mac_space += mac[i] - 'A' + 10;            }            else if(mac[i] == ':' && (i + 1) % 3 == 0)            {                continue;            }            else            {                printf("format error\n");                return -1;            }        }        mac_space++;        sprintf(mac, "%012llx", mac_space);        /*下面循环是为了插入冒号*/        for(i = 0; i < 12 - 2; i++)        {        /*请原谅我自作聪明*/            mac[count - 1 - i - (i)/ 2] = mac[11 - i];            if(i != 0 && (i) % 2 == 0)            {                mac[count - i - (i)/ 2] = ':';            }        }        /*此时count - i - i/2应当为2*/        mac[count - i - (i)/ 2] = ':';        printf("now mac = %s\n", mac);        sleep(1);    }    return 0;}

当然,也不使用long long型变量也可以做到mac地址自增,且听下回分解。

0 0