反转掩码IP地址(通配符掩码)

时间:2013-11-01 01:12:33

标签: c# .net wildcard mask

我尝试转换掩码IP地址的格式(称为通配符掩码)。 我想要,例如,

  1. SubnetMask 0.0.0.3应返回255.255.255.252。
  2. SubnetMask 0.0.1.255应返回255.255.254.0
  3. 有人知道我怎么做到这一点? 从理论上讲,它应该很简单,因为我只需要反转字节中的所有位。 我认为我的反转位功能不起作用?我怎么能这样做? 谢谢你!! :)


    //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());
    

2 个答案:

答案 0 :(得分:1)

我认为你在ReverseBits中所做的数学运算有点不对,你正在尝试的正确术语是Invert,这就是我将如何做到的。

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

答案 1 :(得分:1)

另一种更有效的方法是使用bitwise NOT operator

直接反转这些位
public static void InvertArray(byte[] array)
{
    for(int i = 0; i < array.Length; i++)
    {
        array[i] = (byte)~array[i];
    }
}