' No dot value should ever be larger than 255 ' Technically it is allowed to be over 255 -it just ' rolls over e.g. '256 => 0 -note the (4 - i) that's the 'proper exponent for this calculation
Public Function LongIP2Dotted(ByVal LongIP As Variant) As String
On Error GoTo ExitFun
If LongIP = "" Or LongIP < 0 Then Err.Raise vbObjectError + 1
Dim i As Integer, num As Currency
' big number cruncher For i = 1 To 4 ' break off individual dot values - math out the wazoo num = Int(LongIP / 256 ^ (4 - i))
' sets up the value for the next calculation LongIP = LongIP - (num * 256 ^ (4 - i))
' a generic error to flag the exception handler - 'no dot value should ever be larger than 255 ' technically it is allowed to be over 255 ' but it's not possible from this calculation so 'raise an error If num > 255 Then Err.Raise vbObjectError + 1
' string builder If i = 1 Then ' 1st dot value has no leading dot LongIP2Dotted = num Else ' other dot values have a leading dot LongIP2Dotted = LongIP2Dotted & "." & num End If Next
Exit Function ExitFun: LongIP2Dotted = "0.0.0.0" '"Invalid Input" ' whatever End Function
主要解答者: TechnoFantasy 提交人: TechnoFantasy
感谢: TechnoFantasy
审核者: TechnoFantasy 社区对应贴子: 查看
A : 比如:3544678610转变为××.××.××.××形式啊?
---------------------------------------------------------------
Public Function Dotted2LongIP(DottedIP As String) As Variant
' errors will result in a zero value
On Error Resume Next
Dim i As Byte, pos As Integer
Dim PrevPos As Integer, num As Integer
' string cruncher
For i = 1 To 4
' Parse the position of the dot
pos = InStr(PrevPos + 1, DottedIP, ".", 1)
' If its past the 4th dot then set pos to the last
'position + 1
If i = 4 Then pos = Len(DottedIP) + 1
' Parse the number from between the dots
num = Int(Mid(DottedIP, PrevPos + 1, pos - PrevPos - 1))
' Set the previous dot position
PrevPos = pos
' No dot value should ever be larger than 255
' Technically it is allowed to be over 255 -it just
' rolls over e.g.
'256 => 0 -note the (4 - i) that's the
'proper exponent for this calculation
Dotted2LongIP = ((num Mod 256) * (256 ^ (4 - i))) + _
Dotted2LongIP
Next
End Function
' convert long IP to dotted notation
Public Function LongIP2Dotted(ByVal LongIP As Variant) As String
On Error GoTo ExitFun
If LongIP = "" Or LongIP < 0 Then Err.Raise vbObjectError + 1
Dim i As Integer, num As Currency
' big number cruncher
For i = 1 To 4
' break off individual dot values - math out the wazoo
num = Int(LongIP / 256 ^ (4 - i))
' sets up the value for the next calculation
LongIP = LongIP - (num * 256 ^ (4 - i))
' a generic error to flag the exception handler -
'no dot value should ever be larger than 255
' technically it is allowed to be over 255
' but it's not possible from this calculation so
'raise an error
If num > 255 Then Err.Raise vbObjectError + 1
' string builder
If i = 1 Then
' 1st dot value has no leading dot
LongIP2Dotted = num
Else
' other dot values have a leading dot
LongIP2Dotted = LongIP2Dotted & "." & num
End If
Next
Exit Function
ExitFun:
LongIP2Dotted = "0.0.0.0" '"Invalid Input" ' whatever
End Function