文章分类

标签导航

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

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

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

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

用ASP转换方法如下:(双击复制代码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'检测字符串型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格式的代码下面也得用到,我就不在下面贴了。

简便代码(双击复制代码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'字符串型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
首 页|关于我们|网站建设|域名服务|虚拟主机|百度优化|成功案例|资讯中心|联系方式
在线咨询QQ留言