解析IP的方法

Function:

/*
*	Input:sip
*	Output:ip
*	Return:true/false
*
*	Reference: 
*	cutApart-http://blog.csdn.net/smartup/article/details/8704094
*/
bool formatIP(const char* sip,unsigned long* ip)
{
	char** p;
	char* pend;
	int i, fragements = 4;
	unsigned long l;

	if ( cutApart(sip, &p, '.',&fragements) )
	{
		for (i=0; i<fragements; i++)
		{
			//检查是否为[0,255]直接的数字
			l = strtol(*p,&pend,10);
			if (*pend) return false;
			if ( l<0 || l>255 ) return false;
			(*ip) = (*ip)|l; 
			if (i != fragements-1) *ip = (*ip)<<8;
			p++;
		}
		return true;
	}
	return false;	
}

TestCase:

void test_formatIP()
{
	char s[6][20]={"192.168.25.900","",".100.","0.0.0.0","127.0.0.1","8.0.9.8"};
	int i;
	unsigned long ip;
	printf("test_formatIP:\n");
	for (i=0; i<6; i++)
	{
		ip = 0;
		if( formatIP(s[i],&ip) ) printf("True:%08X\n",ip);
		else printf("false!\n");
	}
}

Result:

test_formatIP:
false!
false!
false!
True:00000000
True:7F000100
True:08090800


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值