将数字转换为 IP 地址 (v4)
Convert Number to IP Address (v4)
我正在尝试将四位数字转换为 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 寻址方案很简单,第二个和第三个八位字节用作站点编号,第四个八位字节用作站点的设备。我没有设计这个方案,因此我不确定如何让 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
您需要将号码一分为二。取前半位加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
我正在尝试将四位数字转换为 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 寻址方案很简单,第二个和第三个八位字节用作站点编号,第四个八位字节用作站点的设备。我没有设计这个方案,因此我不确定如何让 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
您需要将号码一分为二。取前半位加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