Vb.net 如何查看哪个IP地址“更大”

Vb.net 如何查看哪个IP地址“更大”,vb.net,compare,ip-address,Vb.net,Compare,Ip Address,如果我有一个IP地址范围,例如192.168.0.0-192.168.0.255,并且我正在计算,比如说,以随机数递增,我如何确定我是否超过了这个范围?我相信IP地址中有一个值的层次结构,它从右到左变大。i、 e.最左边的值比最右边的值更重要,对ip地址的大小影响更大。例如,192.168.1.0大于192.168.0.255 '''<summary>Checks if IP Address A is larger than IP Address B. Retu

如果我有一个IP地址范围,例如192.168.0.0-192.168.0.255,并且我正在计算,比如说,以随机数递增,我如何确定我是否超过了这个范围?

我相信IP地址中有一个值的层次结构,它从右到左变大。i、 e.最左边的值比最右边的值更重要,对ip地址的大小影响更大。例如,192.168.1.0大于192.168.0.255

           '''<summary>Checks if IP Address A is larger than IP Address B. Returns True if A is larger, returns False if B is larger.</summary>

Private Function Check_If_Larger(ByVal IP_Address_A As Net.IPAddress, ByVal IP_Address_B As Net.IPAddress) As Boolean
    Dim IP_Address_A_Split() As String = IP_Address_A.ToString.Split("."c)
    Dim IP_Address_B_Split() As String = IP_Address_B.ToString.Split("."c)
    Dim IP_Address_A_Score As Integer = 0
    Dim IP_Address_B_Score As Integer = 0

    For i As Integer = 0 To IP_Address_A_Split.Length - 1
        If Convert.ToInt32(IP_Address_A_Split(i)) > Convert.ToInt32(IP_Address_B_Split(i)) Then
            IP_Address_A_Score += 1
        ElseIf Convert.ToInt32(IP_Address_B_Split(i)) > Convert.ToInt32(IP_Address_A_Split(i)) Then
            IP_Address_B_Score += 1
        End If
    Next
    If IP_Address_A_Score > IP_Address_B_Score Then
        Return True
    Else
        Return False
    End If
End Function
根据等级分配分数会有所帮助。例如

Private Function Max(A As String, B As String) As String
    Dim AA() As String = A.Split(".")
    Dim BB() As String = B.Split(".")
    Dim A_Score As Integer = 0
    Dim B_Score As Integer = 0
    For i = 0 To AA.Length - 1
        If AA(i) > BB(i) Then
            A_Score += AA.Length - i
        ElseIf BB(i) > AA(i) Then
            B_Score += BB.Length - i
        End If
    Next
    If A_Score > B_Score Then
        Return A
    ElseIf B_Score > A_Score Then
        Return B
    Else
        Return ""
    End If
End Function

只需将IP地址转换为数字并比较数字即可

    Dim ipmax As Net.IPAddress = Net.IPAddress.Parse("192.168.0.255")
    Dim ip1 As Net.IPAddress = Net.IPAddress.Parse("192.168.1.0")

    Dim ipmaxAsNum As UInt32 = BitConverter.ToUInt32(ipmax.GetAddressBytes.Reverse.ToArray, 0)
    Dim ip1AsNum As UInt32 = BitConverter.ToUInt32(ip1.GetAddressBytes.Reverse.ToArray, 0)

    If ip1AsNum > ipmaxAsNum Then
        Stop
    Else
        Stop
    End If

谢谢分享。即使这是问答,你能不能把上面的问题作为一个真实的问题而不是一个声明来介绍?当然。问答系统令人困惑。它不应该在一个屏幕上同时给出问题和答案框。我不知道应该把什么或什么放在哪里。@user287848当你回答问题时,只有一个输入框。发布后,答案框将显示在您的帖子下方。请修改您的帖子,使其仅包含问题;你可以回答你自己的问题,实际上我们鼓励你这样做!,但这也给了其他人提供答案的机会。哦,你真的想让我编一个问题,好像我有一个问题。。。似乎有点不必要。对。起初,我试图建立一个评分系统。我休息了一会儿,回来了,忘记了,然后完成了剩下的。啊,我怎么能忘记比特转换器呢。这是最好的方法。