怎么把CIDR子网掩码转换成HEX格式?

维托赫夫

告诉我如何获取等于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.GetBytesArray.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

怎么把日期转换成欧洲格式?

来自分类Dev

怎么把String h:m转换成小时格式?

来自分类Dev

子网掩码功能

来自分类Dev

子网掩码功能

来自分类Dev

了解子网掩码

来自分类Dev

awk:将子网掩码转换为前缀

来自分类Dev

怎么把webP图像格式转换成普通格式?的PHP

来自分类Dev

怎么把ArchiveEntry转换成InputStream?

来自分类Dev

怎么把公历转换成波斯日期?

来自分类Dev

怎么把印刷词典转换成NSDictionary?

来自分类Dev

怎么把Php :: DateInterval转换成秒?

来自分类Dev

怎么把MySQL datetime转换成NSDate?

来自分类Dev

怎么把char *转换成LPCWSTR?

来自分类常见问题

怎么把ZonedDateTime转换成日期?

来自分类Dev

怎么把.pem转换成.pfx?

来自分类Dev

怎么把HRESULT转换成错误描述?

来自分类Dev

怎么把Perl bigrat转换成bignum?

来自分类Dev

怎么把Kotlin转换成Int整数?

来自分类Dev

怎么把ALAC转换成FLAC?

来自分类Dev

怎么把int转换成nsindexpath?

来自分类Dev

怎么把UTCSeconds转换成TimeString?

来自分类Dev

怎么把pfCashedNumer转换成int?

来自分类Dev

怎么把PAnsichar转换成PWidechar?

来自分类Dev

怎么把Apfloat转换成BigDecimal?

来自分类Dev

怎么把[x]转换成x?

来自分类Dev

怎么把printf转换成print?

来自分类Dev

怎么把Dart转换成JavaScript?

来自分类Dev

怎么把Future [BSONDocument]转换成清单?

来自分类Dev

怎么把Gregorian string转换成公历?