2011-12-16 106 views
0

我有一個任務需要在C#中完成。我有一個:從C中的IP地址和子網掩碼計算子網號碼

IP地址:192.168.1.57 和 子網掩碼:255.255.0.0

我需要找到子網號,這將是在這種情況下,192.168.0.0。

但是,我需要能夠在C#中執行此操作。沒有使用System.Net庫(我正在編程的系統無法訪問此庫)。

好像這個過程應該是這樣的:

1)拆分IP地址爲八位

2)拆分子網掩碼爲八位

3)子網數字節1 = IP地址八位組1相與子網掩碼八位組1

4)子網數量八位字節2 = IP地址八位字節2相與子網掩碼八位字節2

5)子網數量八位位組3 = IP地址字節3相與子網掩碼八位字節3

6)子網數量八位位組4 = IP地址字節4相與子網掩碼字節4

7)加入子網號字節1 +。 +子網號碼Octet 2 +。 +子網號碼八位字節3 +。 +子網號碼Octet 4

8)Voila!

但是,我的C#很差。有沒有人有C#知識來幫助?

+0

Stackoverflow可能更合適。有人可以移動它嗎? – Rilindo 2011-12-16 17:48:18

+4

Stackoverflow是你想要的地方,但是你的邏輯是不正確的。忘記八位字節 - 它們是爲了人類的可讀性。全部加入,並以二進制比較。 刷上這裏的子網劃分: http://en.wikipedia.org/wiki/Subnetwork – Dan 2011-12-16 17:50:11

+0

丹,謝謝你的方法的建議。但是,我沒有進一步前進。我需要一些C#來做到這一點! – QuietLeni 2011-12-16 19:06:51

回答

4

這應該完成你描述的過程。

string ipAddress = "192.168.1.57"; 
string subNetMask = "255.255.0.0"; 

string[] ipOctetsStr = ipAddress.Split('.'); 
string[] snOctetsStr = subNetMask.Split('.'); 

if (ipOctetsStr.Length != 4 || snOctetsStr.Length != 4) 
{ 
    throw new ArgumentException("Invalid input strings."); 
} 

string[] resultOctets = new string[4]; 
for (int i = 0; i < 4; i++) 
{ 
    byte ipOctet = Convert.ToByte(ipOctetsStr[i]); 
    byte snOctet = Convert.ToByte(snOctetsStr[i]); 
    resultOctets[i] = (ipOctet & snOctet).ToString(); 
} 

string resultIP = string.Join(".", resultOctets); 
0

請原諒我的VB代碼,但它幾乎是相同的:

Dim foo As Net.IPAddress = Net.IPAddress.Parse("192.168.1.57") 
    Dim bar As Net.IPAddress = Net.IPAddress.Parse("255.255.0.0") 

    Dim fooA() As Byte = foo.GetAddressBytes 
    Dim barA() As Byte = bar.GetAddressBytes 

    Array.Reverse(fooA) 
    Array.Reverse(barA) 

    Dim fooNum As Integer = BitConverter.ToInt32(fooA, 0) 
    Dim barNum As Integer = BitConverter.ToInt32(barA, 0) 

    Dim netNum As Integer = fooNum And barNum 
    Dim netNumA() As Byte = BitConverter.GetBytes(netNum) 
    Array.Reverse(netNumA) 

    Dim subNet As New Net.IPAddress(netNumA) 
相關問題