为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
青春有我 2022-11-21 16:47:09
告诉我如何得到一个等于FFFFFFFE它的值结果只EFFFF以相反的顺序输出并且没有前两个字符FFvar 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");
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

一种可能的解决方案是使用BitVector32类根据网络掩码的位长度创建位数组。

BitVector32如果您只想打印十六进制表示,则返回的位掩码就足够了。
假设您还想以IPV4格式表示地址。在这种情况下,网络掩码当然是倒置的。要将其转换为有效的IpAddress,我们需要反转字节顺序。

IPAddress.HostToNetworkOrder不会直接将BitVector32.Data属性返回的值转换为网络字节顺序。
我们可以使用BitConverter.GetBytesArray.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); 

=> 255.255.254.0


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信