您的位置:首页 > 运维架构 > Linux

Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组

2013-04-18 12:31 387 查看
#include <stdio.h>
#include <stdlib.h>

unsigned char a2x(const char c)
{
switch(c) {
case '0'...'9':
return (unsigned char)atoi(&c);
case 'a'...'f':
return 0xa + (c-'a');
case 'A'...'F':
return 0xa + (c-'A');
default:
goto error;
}
error:
exit(0);
}

/*convert a string,which length is 18, to a macaddress data type.*/
#define MAC_LEN_IN_BYTE 6
#define COPY_STR2MAC(mac,str)  \
do { \
for(int i = 0; i < MAC_LEN_IN_BYTE; i++) {\
mac[i] = (a2x(str[i*3]) << 4) + a2x(str[i*3 + 1]);\
}\
} while(0)

int main(int argc, char **argv)
{
unsigned char macaddr[8] = {0};
char macaddr_str[18] = "8e:b2:cf:89:00:4a";
COPY_STR2MAC(macaddr,macaddr_str);
printf("0x%02x 0x%02x\n",macaddr[0],macaddr[1]);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐