【问题标题】:Invert a mask IP Address (Wildcard mask)反转掩码 IP 地址(通配符掩码)
【发布时间】:2013-11-01 01:12:32
【问题描述】:

我尝试转换掩码 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());

【问题讨论】:

  • 每个字节是否只需要255-x

标签: c# .net wildcard mask


【解决方案1】:

我认为你在ReverseBits 中做的数学有点错误,你想要做的事情的正确术语是Invert,这就是我的做法。

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

【讨论】:

  • 非常感谢!正是我需要的!就如此容易。它现在工作正常。
【解决方案2】:

另一种更有效的方法是使用bitwise NOT operator 直接反转位:

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

【讨论】:

  • 我的错,不幸的是仍然需要演员表
猜你喜欢
  • 2013-06-06
  • 2011-07-28
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2012-04-27
  • 2015-10-18
相关资源
最近更新 更多