Одно возможное решение, используя класс BitVector32 для создания массива битов из длины в битах сетевой маски.
Этой битовой маски, возвращаемой BitVector32
, будет достаточно,если вы просто хотите напечатать шестнадцатеричное представление.
Предположим, вы также хотите представить адрес в формате IPV4
.В этом случае маска сети, конечно, инвертируется.Чтобы преобразовать его в действительное IpAddress
, нам нужно инвертировать порядок байтов.
IPAddress.HostToNetworkOrder
не будет напрямую преобразовывать в сетевой порядок байтов значение, возвращаемое свойством BitVector32.Data
.
Мы можем использовать BitConverter.GetBytes иArray.Reverse()
или метод LINQ .Reverse()
, чтобы сделать то же самое.
Это все, что нужно:
int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));
Чтобы вернуть HEX-представление битовой маски, просто преобразуйте его в строку, указав формат 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