文章分类

标签导航

ASP二进制十进制转换、IP转数字、数字转IP

发布时间:2013-03-02 13:33:24 访问次数:8721 【关闭此页】

  有时候我们会在页面上显示用户的所在地区。这个原理是:先获取用户的IP,然后去数据库查询,再得到用户所在的地方。为了减少数据库开销,并不是每一个IP地址都对应一条数据记录,而是按范围划分,每一个范围的IP地址对应一条数据记录。为了便于查询比较,数据库通常是将IP字串转换成十进制数字再进行范围划分。这样在查询时,只要将用户的IP转换成数字,然后去查这个数字所在的范围,即可得到对应的地区记录。

  根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在Internet范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为:125.39.171.82,那么它的二进制数据就是01111101 00100111 10101011 01010010。将这四组八位的二进制数据结合在一起然后再转换成十进制数据即:2099751762,就是这个IP所对应的十进制数据了。

'检测字符串型IP和数值型IP格式是否正确
function checkStr(str,t)
	checkStr=false
	if str="" then exit function
	dim RegEx
	set RegEx=New regExp
	select case t
	case "IP"
		RegEx.Pattern="^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$"
	case "n"
		RegEx.Pattern="^(\d|[1-9][\d]{1,9})$"
	case else
		set RegEx=nothing
		exit function
	end select
	checkStr=regEx.test(str)
	set RegEx=nothing
end function

'十进制转二进制
function D_B(byval d)
	do
		'D_B=d mod 2&D_B
		'd=d\2
		'mod取余和反斜杠取整运算遇到-2147483648到2147483647之外的数字会溢出,所以用下面两句代替。
		D_B=d-fix(d/2)*2&D_B
		d=fix(d/2)
	loop while d
end function

'二进制转十进制
function B_D(b)
	dim i
	for i=1 to len(b)
		B_D=B_D*2+mid(b,i,1)
	next
end function

'字符串型IP转数值型IP
function IP_Number(IP)
	if checkStr(IP,"IP")=false then exit function
	dim arr,i,b
	arr=split(IP,".")
	for i=0 to ubound(arr)
		b=b&right("0000000"&D_B(arr(i)),8)
	next
	IP_Number=B_D(b)
end function

'数值型IP转字符串型IP
function Number_IP(n)
	if checkStr(n,"n")=false then exit function
	if n>4294967295 then exit function
	dim b
	b=right("0000000000000000000000000000000"&D_B(n),32)
	Number_IP=B_D(mid(b,1,8))&"."&B_D(mid(b,9,8))&"."&B_D(mid(b,17,8))&"."&B_D(mid(b,25,8))
end function

  上面这种转换方式是按照思路十进制转二进制,然后分成四组再转为十进制这样一步一步来的,很是繁琐。下面分享一组简单的给大家,当然,上面那段检测IP格式的代码下面也得用到,我就不在下面贴了。

'字符串型IP转数值型IP
function IPToNumber(IP)
	if checkStr(IP,"IP")=false then exit function
	dim arr
	arr=split(IP,".")
	IPToNumber=arr(0)*16777216+arr(1)*65536+arr(2)*256+arr(3)
end function

'数值型IP转字符串型IP
function NumberToIP(n)
	if checkStr(n,"n")=false then exit function
	if n>4294967295 then exit function
	dim a,b,c,d
	a=fix(n/16777216)
	b=fix(n/65536-a*256)
	c=fix(n/256-a*65536-b*256)
	d=n-a*16777216-b*65536-c*256
	NumberToIP=a&"."&b&"."&c&"."&d
end function
本文标签:ASP
首 页|关于我们|网站建设|域名服务|虚拟主机|百度优化|成功案例|资讯中心|联系方式