nt parse_mac_address(const char *mac_str, unsigned char *mac_bytes) {
if (mac_str == NULL || mac_bytes == NULL) {
return -1; // 输入指针为空
}
if (mac_str[0] == '\0')
{
return -1;
}
const char *token = mac_str;
int i = 0;
while (i < 6 && *token != '\0') {
const char *endptr;
unsigned long byte = strtoul(token, (char **)&endptr, 16);
if (endptr == token || *endptr != ':' && *endptr != '\0' || byte > 0xFF) {
return -1; // 转换失败或格式错误
}
mac_bytes[i++] = (unsigned char)byte;
// 跳过冒号(如果存在)并移动到下一个字节
if (*endptr == ':') {
token = endptr + 1;
} else {
// 如果不是冒号,则应该是字符串的结尾
if (*endptr != '\0') {
return -1; // 格式错误
}
break;
}
}
if (i != 6) {
return -1; // MAC地址不完整
}
return 0;
}
int parse_ip_address(const char* ip_str, unsigned char *ip_bytes) {
if( NULL == ip_str || NULL == ip_bytes )
{
return -1;
}
if (ip_str[0] == '\0')
{
return -1;
}
sscanf(ip_str, "%hhu.%hhu.%hhu.%hhu", &ip_bytes[0],&ip_bytes[1],
&ip_bytes[2],&ip_bytes[3]);
return 0;
}