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

标签 c# .net winforms hex netmask

告诉我如何获得等于 FFFFFFFE 的值结果只输出EFFFF倒序且不包含 FF 的前两个字符

源代码:Converting subnet mask “/” notation to Cisco 0.0.0.0 standard

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.GetBytesArray.Reverse() 或 LINQ 的 .Reverse() 方法来做同样的事情。

这就是所有需要的:

int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));

要返回位掩码的十六进制表示,只需将其转换为指定十六进制格式的字符串:
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

关于c# - 如何将 CIDR 子网掩码转换为 HEX 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440867/

相关文章:

c# - Catel在WPF导航应用程序中能否很好地工作

c# - 在 Azure 上运行重复任务

.net - 用于创建类和将类移动到新文件的 Resharper 快捷方式

c# - "System.ArgumentOutOfRangeException"为什么会显示?为什么 list<>number 停止打印?

c# - WebClient.CancelAsync — 文件仍在下载

c# - 设置图像时参数无效

c# - C# compareto 方法如何比较字符串

c# - 如何使用 MVC Web API 进行身份验证?

c# - 停靠多个控件 - 一个填充剩余空间

c# - 在 C# win Form 中创建维恩图