2017-02-13 4 views
0

4 자리 숫자를 IP 주소로 변환하려고합니다. 예를 들어숫자를 IP 주소 (v4)로 변환

0001 ---> * ---> * .192.111.01

1,111 .192.11.01

0111 .192.1.01

0011 ---> * ---> * .196.87.01

3458 ---> * .205.130.01

나는 서브넷 마스크는 255.255.192.0 믿습니다.

나는 vb.net에서이 작업을 수행하는 가장 좋은 방법에 대한 제안을 해주시면 매우 감사하겠습니다.

기타 정보 :

이 사용자는 4 자리 숫자를 입력하는 간단한 Pinger의 프로그램 인 IP 주소 체계는 간단하다의 (그들은 핑하고자하는 실제 사이트의 ID를.) 2nd & 세 번째 옥텟이 사이트 번호로 사용되고 네 번째 옥텟이 사이트의 장치로 사용됩니다. 나는이 계획을 디자인하지 않았고, 왜 vb.net이 그것을 이해할 수 있는지 확신 할 수 없다.

가 나는 시도했다 :

나는 그것을 매우 조잡 다음과 같은 방법을,하고 생각했다.

그러나 이것은 단지 * .192.255.01 나는 그것이 옥텟 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 

솔루션에 255 넘어 일단 두 옥텟의 수를 분할하는 방법을 모른다로서 최대 작동합니다

 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 

그러면 첫 번째 부분

,691 192을 추가 = 0x0D82

에게 0x0d로
가 0x82

을 수를 가지고 두

3458에서 분할

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