2013-11-01 166 views
0

我嘗試轉換掩碼IP地址的格式(稱爲通配符掩碼)。 我想,例如,反轉掩碼IP地址(通配符掩碼)

  1. SubnetMask 0.0.0.3應返回255.255.255.252。
  2. 子網掩碼0.0.1.255應該返回255.255.254.0

有人有任何線索我怎麼能做到這一點? 理論上,它應該很簡單,因爲我只需要反轉字節中的所有位。 我認爲我的函數反轉位不工作?我怎麼能做到這一點? 謝謝你! :)


//Retreive IP Subnet Mask (ex: Format 0.0.0.255) 
IPAddress SubnetMask = IPAddress.Parse(template_script[line_delimiter].Split(' ')[2]); 

//Retreive bytes array of Mask 
byte[] bytes = SubnetMask.GetAddressBytes(); 

//Reverse all bit in bytes 
byte[] reversed = Function.InvertBits(bytes); 

//Retreive IP Address of inverted byte array 
IPAddress SubnetMask_inverted = new IPAddress(reversed); 

MessageBox.Show("Subnet original: " + SubnetMask.ToString() + "\nSubnet inverted : " + SubnetMask_inverted.ToString()); 
+0

你只是想'255 x'每個字節? – Blorgbeard

回答

1

我想你在ReverseBits做數學題,是一個小錯誤,也適當的術語,你正在試圖爲Invert,這裏是我會怎麼做它。

public static void InvertArray(byte[] array) 
{ 
    for(int i = 0; i < array.Length; i++) 
    { 
     array[i] = (byte)(255 - array[i]); 
    } 
} 
+0

非常感謝!正是我需要的!就如此容易。它現在工作正常。 –

1

另外,稍微efficant方式,是直接使用反轉位bitwise NOT operator

public static void InvertArray(byte[] array) 
{ 
    for(int i = 0; i < array.Length; i++) 
    { 
     array[i] = (byte)~array[i]; 
    } 
} 
+0

給我一個錯誤。 –

+0

我不好,還是需要演員,不幸的是 – markmnl