如何将 CIDR 子网掩码转换为 HEX 格式?
How to convert CIDR subnet mask to HEX format?
告诉我如何得到一个等于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 class 从网络掩码的位长度创建位数组。
如果您只想打印十六进制表示,则由 BitVector32
编辑的位掩码 return 就足够了。
假设您还想以 IPV4
格式表示地址。在这种情况下,网络掩码当然是倒置的。要将其转换为有效的 IpAddress
,我们需要反转字节顺序。
IPAddress.HostToNetworkOrder
不会直接将值 return 由 BitVector32.Data
属性.
转换为网络字节顺序
我们可以使用 BitConverter.GetBytes 和 Array.Reverse()
或 LINQ 的 .Reverse()
方法来做同样的事情。
这就是所有需要的:
int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));
要return位掩码的十六进制表示,只需将其转换为指定十六进制格式的字符串:
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
告诉我如何得到一个等于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 class 从网络掩码的位长度创建位数组。
如果您只想打印十六进制表示,则由 BitVector32
编辑的位掩码 return 就足够了。
假设您还想以 IPV4
格式表示地址。在这种情况下,网络掩码当然是倒置的。要将其转换为有效的 IpAddress
,我们需要反转字节顺序。
IPAddress.HostToNetworkOrder
不会直接将值 return 由 BitVector32.Data
属性.
转换为网络字节顺序
我们可以使用 BitConverter.GetBytes 和 Array.Reverse()
或 LINQ 的 .Reverse()
方法来做同样的事情。
这就是所有需要的:
int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));
要return位掩码的十六进制表示,只需将其转换为指定十六进制格式的字符串:
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