IP到数字转换

  平时在数据库的编程过程中,需要记录一些IP地址,原本是直接和IP地址(xxx.xxx.xxx.xxx)的形式保存,也就是说在数据库里是明文的,且是字符串,比较占空间。
  有一天同事让我帮他把一个数据库里的一些数字转成IP地址,那个数据库是Sygate(一个共享上网的软件)用来记录上网记录的,我打开数据库看了看,刚开始没有什么头绪,因为自己对这方面没有什么研究,于是就去网上找找,看看有没有相关的资料,嗯,不错,现在的网络基本上想要的资料都可以找的到,我找的一篇文章,或者更恰当的说是一段文字说明,介绍它的算法的;既然已经有了头绪,那么就开始用代码来实现吧。
'转换过程如下:
'1、取得IP,如:192.168.0.1
'2、再将IP顺序反转:1.0.168.192
'3、将IP分成四部分,分别转成16进制,位数不足,在左边加0,转换完成后为:01.00.A8.C0
'4、去掉所有的".",结果为:100A8C0
'5、再将其转成十进制:16820416

'// IP到数字转换
Public Function IPToNumber(ByVal strValue As String) As String
   Dim strTemp                   As String
   Dim strIP()                   As String
   Dim strOutput                 As String
   Dim i                         As Integer
  
   On Error GoTo LocatErr
  
   '// 将IP分成4个部份
   strIP = Split(strValue, ".")
  
   '// 这里是将IP倒过来的,即:192.168.0.1=1.0.168.192
   For i = 3 To 0 Step -1
      strTemp = Hex$(strIP(i))
      '// 将每部份以2位数的数字表示
      strOutput = strOutput & String(2 - Len(strTemp), "0") & strTemp
   Next
  
   IPToNumber = CStr(Trim(CLng("&H" & strOutput)))
  
   Exit Function
LocatErr:
   Err.Clear
   IPToNumber = ""
End Function

'// 数字到IP转换(是通过 IPToNumber 转换过的数字)
Public Function NumberToIP(ByVal strValue As String) As String
   Dim strTemp                      As String
   Dim strIP(1 To 4)                As String
   Dim strOutput                    As String
   Dim i                            As Integer
  
   On Error GoTo LocatErr
  
   '// 取得十六进制值
   strTemp = Hex$(strValue)
     
   '// 不足8位前面加 0
   strTemp = String(8 - Len(strTemp), "0") & strTemp
  
   '// 将数字以每2位分给数组
   For i = 1 To 4
      strIP(i) = Mid$(strTemp, (i - 1) * 2 + 1, 2)
   Next
  
   '// 合并IP
   For i = 4 To 1 Step -1
      strOutput = strOutput & CInt("&H" & strIP(i)) & "."
   Next
  
   '// 去掉最后的一个 "."
   strOutput = Left$(strOutput, Len(strOutput) - 1)
  
   NumberToIP = strOutput
   Exit Function
LocatErr:
   Err.Clear
   NumberToIP = ""
End Function

你可能感兴趣的:(通用函数)