0

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

  1. 子网掩码 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());
4

2 回答 2

1

我认为你做的数学ReverseBits有点错误,也是你想要做的正确术语Invert,这就是我会怎么做的。

public static void InvertArray(byte[] array)
{
    for(int i = 0; i < array.Length; i++)
    {
        array[i] = (byte)(255 - array[i]);
    }
}
于 2013-11-01T01:26:08.377 回答
1

另一种稍微更有效的方法是使用按位 NOT 运算符直接反转位:

public static void InvertArray(byte[] array)
{
    for(int i = 0; i < array.Length; i++)
    {
        array[i] = (byte)~array[i];
    }
}
于 2013-11-01T01:43:29.987 回答