For i = 1 To Len(Text2.Text) 'ID逐字转换
If AscW(Mid(Text2.Text, i, 1)) > 31 And AscW(Mid(Text2.Text, i, 1)) < 127 Then 'AscW将字符转换为Unicode10进制编码
j = j & Mid(Text2.Text, i, 1) '如果字符的编码是从32到126 那就不用转换 直接读取到变量j里面
Else
j = j & "\u" & LCase(Hex(AscW(Mid(Text2.Text, i, 1)))) '反之 转换为Unicode16进制编码并小写再读取到变量j里面
End If
Next '最终得出的j便是度娘可接受的模式了 这样 我们便可以用这个j来做遍历了
b = a / 16 'a就是刚刚的user_ip 除以16 这里VB自动识别成浮点型的除法 明显不会再和Long型扯上什么关系了
c = InStr(b, ".") '如果不能被整除 那么b自然就是一个小数 于是找到小数点
e = a - Mid(b, 1, c - 1) * 16 '获取整数部分 乘以16 然后用a去减 就能得出余数了 这个余数就是user_ip 16进制的末位
If e = 10 Then
e = "A"
ElseIf e = 11 Then
e = "B"
ElseIf e = 12 Then
e = "C"
ElseIf e = 13 Then
e = "D"
ElseIf e = 14 Then
e = "E"
ElseIf e = 15 Then
e = "F"
End If '这里按照16进制的表示法来 然后这样:
d = Hex(Mid(b, 1, c - 1)) & e
'这里要注意的是 就算最大4294967295 除以16也会远小于Long型的限制 所以我们放心使用Hex函数吧
'获取前面的16进制位数 然后加上最后一位
For i = Len(d) To 1 Step -2 '步频-2 每次减2 两位为一段 倒序读取 重新转换为10进制
If i = 1 Then '有时候得出的d是7位 那么明显就是ip的最后一位只用一个16进制数表示 前面三段如果出现这种情况都会加一个0
Text3.Text = Text3.Text & CLng("&H" & Mid(d, i, 1))
Else
Text3.Text = Text3.Text & CLng("&H" & Mid(d, i - 1, 2))
If i > 2 Then
Text3.Text = Text3.Text & "." '别忘了IP地址里面的点
End If
End If
Next