如何将 CIDR 子网掩码转换为 HEX 格式?

告诉我如何得到一个等于FFFFFFFE它的值结果只EFFFF以相反的顺序输出并且没有前两个字符FF

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");




青春有我
浏览 64回答 1
1回答

慕少森

一种可能的解决方案是使用BitVector32类根据网络掩码的位长度创建位数组。BitVector32如果您只想打印十六进制表示,则返回的位掩码就足够了。假设您还想以IPV4格式表示地址。在这种情况下,网络掩码当然是倒置的。要将其转换为有效的IpAddress,我们需要反转字节顺序。IPAddress.HostToNetworkOrder不会直接将BitVector32.Data属性返回的值转换为网络字节顺序。我们可以使用BitConverter.GetBytes和Array.Reverse()/或 LINQ 的.Reverse()方法来做同样的事情。这就是所有需要的:int cidr = 23;var bits = new BitVector32(-1 << (32 - cidr));要返回位掩码的十六进制表示,只需将其转换为指定十六进制格式的字符串:.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);&nbsp;=> 255.255.254.0
打开App,查看更多内容
随时随地看视频慕课网APP