通过qqwry.dat解析IP地址的动态链接库(C++源码)

源代码地址:

http://download.csdn.net/detail/witch_soya/4881954


自己写了一个测试用例。dll效果如下:




其中使用半跳检索法查询的代码如下。

//半跳检索法查询
int CReadQQWryDat::QueryIndex(CString strIP)
{
	int index = -1;
	DWORD dwInputIP;
	DWORD dwStartIP;
	dwInputIP = IP2DWORD(strIP);

	//顺序查找
	/*
	if (dwInputIP<=0x7FFFFFFF)
	for (int i=0;i<QueryRecordCount();i++)
	{
		dwStartIP = QuerySIP(i);
		if (dwStartIP<=dwInputIP && dwInputIP<=m_dwLastIP)
		{
			index = i;
			break;
		}
	}
	else
	for(int i=QueryRecordCount()-1;i>=0;i--)
	{
		dwStartIP = QuerySIP(i);
		if (dwStartIP <=dwInputIP && dwInputIP <= m_dwLastIP)
		{
			index = i;
			break;
		}
	}
	*/

	//半跳法
	int iT;
	int iB,iE;
	iB = 0;
	iE = QueryRecordCount()-1;
	iT = iE/2;

	while(iB<iE)
	{
		dwStartIP = QuerySIP(iT);
		if (dwInputIP == dwStartIP)
		{
			index = iT;
			break;
		}
		if ((iE-iB) <= 1)
		{
			for (int i=iB;i<=iE;i++)
			{
				dwStartIP = QuerySIP(i);
				if (dwStartIP <= dwInputIP && dwInputIP <= m_dwLastIP )
				{
					index = i;
					break;
				}
			}
			break;
		}
		if (dwInputIP > dwStartIP)
		{
			iB = iT;
		}
		else
		{
			iE = iT;
		}
		iT = iB + (iE-iB)/2;
	}
	return index;
}






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值