2017-02-13 222 views
0

我試圖將四位數字轉換爲IP地址。例如:將號碼轉換爲IP地址(v4)

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中執行此操作的最佳方法的建議。

其他信息:

這是在用戶輸入一個4個位數號碼的簡單pinger程序的IP尋址方案很簡單,(他們希望ping通物理站點的ID。)第二個&第三個字節用作站點號,第四個八位字節用作站點上的設備。我沒有設計這個方案,因此我不確定如何讓vb.net去理解它。

我已經試過:

我想過這樣做下面的方式,這是非常粗糙的。然而,這隻會工作到* .192.255.01,因爲我不知道如何,一旦超出255個八位位組3

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 

回答

0

您需要將數字分成兩部分。獲取前一半的位並將它們添加到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

+0

謝謝你,我用一個簡單得多的版本,但原理是一樣的,看我爲細節更新。 – user3224987

+0

@ user3224987我覺得我的簡單,但我很高興你找到了解決方案:) –

0

這應該使它

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