一种可能的解决方案是使用BitVector32类根据网络掩码的位长度创建位数组。
BitVector32
如果您只想打印十六进制表示,则返回的位掩码就足够了。
假设您还想以IPV4
格式表示地址。在这种情况下,网络掩码当然是反转的。要将其转换为有效的IpAddress
,我们需要反转字节顺序。
IPAddress.HostToNetworkOrder
不会直接将BitVector32.Data
属性返回的值转换为网络字节顺序。
我们可以使用BitConverter.GetBytes或Array.Reverse()
LINQ 的.Reverse()
方法来做同样的事情。
这就是所有需要的:
int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));
要返回位掩码的 HEX 表示,只需将其转换为指定 Hex 格式的字符串:
Formatting Types in .NET (MSDN)
Console.WriteLine(bits.Data.ToString("X2"));
=> FFFFFE00
如果需要,将其转换为IpAddress
格式:
var bytes = BitConverter.GetBytes((uint)bits.Data);
var netMask = new IPAddress(bytes.Reverse().ToArray());
Console.WriteLine(netMask);
=> 255.255.254.0