希望成为一个有思想,有信仰的程序设计师。
分类: C/C++
2012-06-13 12:33:09
inet_pton的源代码分析(一)http://blog.chinaunix.net/uid-26642637-id-3241576.html
本文主要分析函数:static int internal_function inet_pton4(src, dst)
假设src=”192.168.0.1”
if (saw_digit && *tp == 0)
return (0);
if (new > 255)
return (0);
*tp = new;
if (! saw_digit) {
if (++octets > 4)
return (0);
saw_digit = 1;
}
}
/*上面一段代码主要是对数字字符串进行处理,如果这个字符是数字字符的话,就要将其转化成整数数字,同时根据saw_digit的值来判断前一个被处理的字符是否是数字字符,从而达到统计已转换的数字的个数,一个数字可以由多个字符数字构成,(如192,就是有3个字符构成),若一个数字有没有转换结束,则saw_digit=1;则octerts则不会继续进自增运算。*/
/*上面一段代码主要是判断字符是否是”.”分隔符,如果是点分隔符,则表示新的一个整数的转换将要开始,就将saw_digit = 0;从而达到开始新的整数转换的目的。
*/
12. if (octets < 4)
return (0);
memcpy(dst, tmp, NS_INADDRSZ);
return (1);
}/*这段代码没有什么难理解的地方主要就是如果转换出来的整数的个数大于四,则出错,返回0.*/
代码赏析:这个代码对边界情况考虑的非常严密,对每个可能出现的问题都做了防范。最主要的是充分利用unsigned char型的优点,节省了空间方便了输出。
如果你想输出最后的结果,也就是转换过后的网络地址格式的数据,也很简单。
直接for(i=0;i<4;i++) printf(“%d ”,(int)dst[i]);