告诉我如何获取等于FFFFFFFE
它的值后,结果只能EFFFF
以相反的顺序输出,而没有前两个字符FF
源代码:将子网掩码“ /”表示法转换为Cisco 0.0.0.0标准
var cidr = 23;
var zeroBits = 32 - cidr;
var result = uint.MaxValue;
result &= (uint)((((ulong)0x1 << cidr) - 1) << zeroBits);
result = (uint)IPAddress.HostToNetworkOrder((int)result);
textBoxHex.Text = result.ToString("X");
一种可能的解决方案,使用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表示形式,只需将其转换为指定十六进制格式的字符串即可:.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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句