Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将数字转换为IP地址(v4)_Vb.net_Network Programming_Ip Address - Fatal编程技术网

Vb.net 将数字转换为IP地址(v4)

Vb.net 将数字转换为IP地址(v4),vb.net,network-programming,ip-address,Vb.net,Network Programming,Ip Address,我想把一个四位数的数字转换成一个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中实现此功能的最佳方法提出的任何建议 其他信息: Dim var1 As Integer = Fix(192 + (NumericUpDown1.Value /

我想把一个四位数的数字转换成一个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中实现此功能的最佳方法提出的任何建议

其他信息:

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

我所尝试的:

        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
我想用下面的方法来做,这是非常粗糙的。然而,这将只适用于*.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

你需要把这个数字一分为二。获取前一半位并将其添加到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

这应该够了

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

谢谢,我使用了一个更简单的版本,但原理是一样的,请参阅我的更新以了解详细信息。@user3224987我发现我的版本更简单,但我很高兴你找到了解决方案:)