【问题标题】:Convert Number to IP Address (v4)将数字转换为 IP 地址 (v4)
【发布时间】:2017-07-01 09:46:05
【问题描述】:

我正在尝试将四位数字转换为 IP 地址。例如:

0001 ---> *.192.1.01

0011 ---> *.192.11.01

0111 ---> *.192.111.01

1111 ---> *.196.87.01

3458 ---> *.205.130.01

我相信子网掩码是 255.255.192.0。

对于在 vb.net 中执行此操作的最佳方式的任何建议,我将不胜感激。

其他信息:

这是一个简单的 pinger 程序,用户输入一个四位数字(他们希望 ping 的物理站点的 ID)。IP 寻址方案很简单,第 2 和第 3 个八位字节用作站点编号,并且第四个八位字节用作站点的设备。我没有设计这个方案,因此我不确定如何让 vb.net 理解它。

我的尝试:

我想过按照下面的方式来做,非常粗暴。但是,这最多只能工作到 *.192.255.01,因为我不知道一旦在八位字节 3 中超过 255,我不知道如何在两个八位字节之间拆分数字。

Private Sub btnStartPing(sender As Object, e As EventArgs) Handles btnStartPing.Click

    Dim Octet1 As Integer = *
    Dim Octet2 As Integer = 192
    Dim Octet3 As Integer = txtSiteID.text
    Dim Octet4 As Integer = 01
    Dim CompleteIP As String = ""

    CompletIP = Octet1 & "." & Octet2  & "." & Octet3 & "." & Octet4 

    'PING CompleteIP

end sub

解决方案:

        Dim var1 As Integer = Fix(192 + (NumericUpDown1.Value / 256))
        Dim var2 As Integer = Fix((NumericUpDown1.Value Mod 256))

        MsgBox("Your IP address is: " & "10." & var1 & "." & var2 & "." & "200")
    End Sub

【问题讨论】:

    标签: vb.net network-programming ip-address


    【解决方案1】:

    您需要将数字一分为二。获取前半部分位加到192,后半部分位直接使用。

        Dim number As Integer
    
        number = 1
        Console.WriteLine("*.{0}.{1}.01", 192 + ((number And &HFF00) >> 8), number And &HFF) ' *.192.1.01
    
        number = 11
        Console.WriteLine("*.{0}.{1}.01", 192 + ((number And &HFF00) >> 8), number And &HFF) ' *.192.11.01
    
        number = 111
        Console.WriteLine("*.{0}.{1}.01", 192 + ((number And &HFF00) >> 8), number And &HFF) ' *.192.111.01
    
        number = 1111
        Console.WriteLine("*.{0}.{1}.01", 192 + ((number And &HFF00) >> 8), number And &HFF) ' *.196.87.01
    
        number = 3458
        Console.WriteLine("*.{0}.{1}.01", 192 + ((number And &HFF00) >> 8), number And &HFF) ' *.205.130.01
    

    取数字并一分为二

    3458 = 0x0D82

    0x0D
    0x82

    然后在第一部分加上192

    0x0D + 192 = 205
    0x82 = 130

    【讨论】:

    • 谢谢,我用了一个更简单的版本,但原理是一样的,详见我的更新。
    • @user3224987 我发现我的更简单,但我很高兴你找到了解决方案 :)
    【解决方案2】:

    这应该成功了

    Public Function StartPing(txtSiteId As String) As String
        Dim SiteId As Integer = Integer.Parse(txtSiteId)
    
        'backslash performs integer division (no fractionary part)
        'will throw an error when SiteId results in values greater than 255
        'type Byte allows only values from 0 to 255
        Dim Octet2 As Byte = 192 + (SiteId \ 256)
    
        'Mod gets rest of division
        Dim Octet3 As Byte = SiteId Mod 256
    
        Return String.Format("*.{0}.{1}.01", Octet2, Octet3)
    End Function
    

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多