mac字符串转hwaddr,支持各种格式

来源:互联网 发布:windows装mac os虚拟机 编辑:程序博客网 时间:2024/06/05 03:06
#include <stdio.h>#include <string.h>#include <linux/if_ether.h>#include <ctype.h>#include <inttypes.h>static int str_to_hwaddr(uint8_t *hwaddr, const char *str){char c;uint8_t used = 0;uint8_t quarter = 0;memset(hwaddr, 0, ETH_ALEN);while(isspace(*str)) ++str;while('\0' != *str) {c = *str++;switch(c) {default :if(strchr("-:. ", c)) {if(used) {++hwaddr;used = 0;}continue;}return -1;case '0' ... '9':quarter = c - '0';break;case 'a' ... 'f':quarter = c - 'a' + 10;break;case 'A' ... 'F':quarter = c - 'A' + 10;break;}*hwaddr = ((*hwaddr)<<4) + quarter;if(used) ++hwaddr;used = !used;}return 0;}static int print_hwaddr(const char *mac){uint8_t hwaddr[ETH_ALEN];str_to_hwaddr(hwaddr, mac);fprintf(stdout, "mac: %s, hwaddr: %02X:%02X:%02X:%02X:%02X:%02X\n",                 mac,                 (uint32_t)hwaddr[0], (uint32_t)hwaddr[1],                 (uint32_t)hwaddr[2], (uint32_t)hwaddr[3],                 (uint32_t)hwaddr[4], (uint32_t)hwaddr[5]);return 0;}int main(int argc, char *argv[]){char mac[128];strcpy(mac, "0.1-0:203040506");print_hwaddr(mac);strcpy(mac, "010...20304050*67");print_hwaddr(mac);strcpy(mac, "a");print_hwaddr(mac);strcpy(mac, "0123456789aBcDeF");print_hwaddr(mac);strcpy(mac, "010203040506");print_hwaddr(mac);return 0;}


原创粉丝点击