#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;
}