mac地址自增(通用简易版)

上一篇关于mac地址自增的博文可行的必要条件是sizeof(long long) >= 6,这一次,我们使用更简洁但更浪费空间的方法(这是大自然最擅长的:浪费)。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(void)
{
    char mac[] = "00:0C:29:54:E2:F4";
    unsigned mac_calc[6] = {0};
    int count;
    for(; ; )
    {
        count = sscanf(mac, "%x:%x:%x:%x:%x:%x", 
                &mac_calc[5], &mac_calc[4], &mac_calc[3], &mac_calc[2], &mac_calc[1], &mac_calc[0]);
        if(count != 6)
        {
            printf("count = %d\n", count);
            printf("read mac error\n");
            return -1;
        }
        /*1.低位自增 2.高位取其进位 3.低位将进位位置0*/
        mac_calc[0]++;
        mac_calc[1] += ((mac_calc[0] & (0x100))  >> 8);
        mac_calc[0] = mac_calc[0] & (0xff);
        /*最低为运算完成,下面类似*/
        mac_calc[2] += ((mac_calc[1] & (0x100))  >> 8);
        mac_calc[1] = mac_calc[1] & (0xff);
        mac_calc[3] += ((mac_calc[2] & (0x100))  >> 8);
        mac_calc[2] = mac_calc[2] & (0xff);
        mac_calc[4] += ((mac_calc[3] & (0x100))  >> 8);
        mac_calc[3] = mac_calc[3] & (0xff);
        mac_calc[5] += ((mac_calc[4] & (0x100))  >> 8);
        mac_calc[4] = mac_calc[4] & (0xff);
        if(mac_calc[5] > 0xff)
        {
            printf("%#x invalid mac\n", mac_calc[5]);
            break;
        }
        sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", 
                mac_calc[5], mac_calc[4],mac_calc[3],mac_calc[2],mac_calc[1],mac_calc[0]);
        printf("now mac: %s\n", mac);
        //sleep(1);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值