如何将IP地址转换为整数型
获取到一个IP数据库
其格式为
startip endip countrylocal
0 16777215IANA
1677721633554431IANA
3355443250331647IANA
5033164867108863美国新泽西通用电气公司
6710886467829759美国
6782976067895295美国夏威夷
...........
通过测试得知
0-16777215 为 0.0.0.0-0.255.255.255
16777216-33554431 为 1.0.0.0-1.255.255.255
如何能通过代码(非控件) 将某IP地址转换为该类型的数据?
[解决办法]
VB代码的简易实现
- VBScript code
Private Sub Command1_Click() MsgBox LongToIP(67108863) & " - " & IPToLong("3.255.255.255")End SubPrivate Function LongToIP(IPLong As Long) As String Dim Str As String, IPStr As String Str = Hex(IPLong) Str = String(8 - Len(Str), "0") & Str IPStr = "" For X = 1 To 4 If X = 1 Then IPStr = Int("&H" & Mid(Str, (X - 1) * 2 + 1, 2)) Else IPStr = IPStr & "." & Int("&H" & Mid(Str, (X - 1) * 2 + 1, 2)) End If Next X LongToIP = IPStrEnd FunctionPrivate Function IPToLong(IPStr As String) As Long Dim Str() As String, HEXStr As String, TempStr As String Str = Split(IPStr, ".") HEXStr = "" For X = 0 To UBound(Str) TempStr = Hex(Str(X)) HEXStr = HEXStr & String(2 - Len(TempStr), "0") & TempStr Next X IPToLong = CLng("&H" & HEXStr)End Function
[解决办法]
昨天匆忙,下面补全:
- VBScript code
Option ExplicitFunction IPToLong(ByVal IP As String) As Long Dim tmp As Long Dim i As Long IP = Replace(IP, ".", "\") For i = 3 To 0 Step -1 tmp = Val(IP) IPToLong = IPToLong + tmp * 256 ^ i IP = Replace(IP, tmp & "\", "", , 1) NextEnd FunctionFunction LongToIP(ByVal IPLong As Long) As String Dim a(3) Dim i As Long, idx As Long, m As Long For i = 3 To 0 Step -1 m = 256 ^ i a(idx) = IPLong \ m IPLong = IPLong Mod m idx = idx + 1 Next LongToIP = Join(a, ".")End FunctionPrivate Sub Form_Click() Print IPToLong("1.255.255.255") Print LongToIP(IPToLong("1.255.255.255")) Print IPToLong("1.0.0.0") Print LongToIP(IPToLong("1.0.0.0"))End Sub