Cómo convertir una cadena Mac a una dirección Byte en C

Quiero tomar la dirección MAC desde la línea de comandos, así que la obtuve como una cadena … ¿cómo puedo convertir esta cadena MAC de 17 bytes como “00: 0d: 3f: cd: 02: 5f” a una dirección MAC de 6 bytes en C

En una implementación conforme a C99, esto debería funcionar

unsigned char mac[6]; sscanf(macStr, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); 

De lo contrario, necesitarás:

 unsigned int iMac[6]; unsigned char mac[6]; int i; sscanf(macStr, "%x:%x:%x:%x:%x:%x", &iMac[0], &iMac[1], &iMac[2], &iMac[3], &iMac[4], &iMac[5]); for(i=0;i<6;i++) mac[i] = (unsigned char)iMac[i]; 

Sin funciones integradas y manejo de errores simplemente:

 unsigned char mac[6]; for( uint idx = 0; idx < sizeof(mac)/sizeof(mac[0]); ++idx ) { mac[idx] = hex_digit( mac_str[ 3 * idx ] ) << 4; mac[idx] |= hex_digit( mac_str[ 1 + 3 * idx ] ); } 

La entrada es en realidad 3 * 6 bytes con \0 .

 unsigned char hex_digit( char ch ) { if( ( '0' <= ch ) && ( ch <= '9' ) ) { ch -= '0'; } else { if( ( 'a' <= ch ) && ( ch <= 'f' ) ) { ch += 10 - 'a'; } else { if( ( 'A' <= ch ) && ( ch <= 'F' ) ) { ch += 10 - 'A'; } else { ch = 16; } } } return ch; }