其实就是实现linux的函数inet_pton
,在做网络编程时经常会遇到,当然一般来说直接调用inet_pton
就可以解决问题,今天主要是自己动手实现inet_pton
,当然是参考开源实现
1 开源实现
/*
* @return
* 1 succ
* 0 fail
*/
int inet_pton4(const char* src, uint8_t* dst)
{
static const char digits[] = "0123456789";
int saw_digit, octets, ch;
uint8_t tmp[4], *tp;
tp = tmp;
*tp = 0;
saw_digit = 0;
//总共几段
octets = 0;
while((ch = *src++) != '\0')
{
const char* pch;
if((pch = strchr(digits, ch)) != NULL)
{
//pch - digits得到是具体的值
//new是uint32_t,这里有类型强转为uint8_t
uint32_t new = *tp * 10 + (pch - digits);
if(new > 255)
{
return 0;
}
*tp = new;
if(!saw_digit)
{
if(++octets > 4)
{
return 0;
}
//当前字符是数字字符
saw_digit = 1;
}
}
//开始新的一段数字
else if(ch = '.' && saw_digit)
{
if(octets == 4)
{
return 0;
}
*++tp = 0;
saw_digit = 0;
}
else{
return 0;
}
}
if(octets < 4)
{
return 0;
}
memcpy(dst, tmp, 4);
return 1;
}