1 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
一種可能的解決方案是使用BitVector32類根據(jù)網(wǎng)絡(luò)掩碼的位長度創(chuàng)建位數(shù)組。
BitVector32
如果您只想打印十六進(jìn)制表示,則返回的位掩碼就足夠了。
假設(shè)您還想以IPV4
格式表示地址。在這種情況下,網(wǎng)絡(luò)掩碼當(dāng)然是倒置的。要將其轉(zhuǎn)換為有效的IpAddress
,我們需要反轉(zhuǎn)字節(jié)順序。
IPAddress.HostToNetworkOrder
不會(huì)直接將BitVector32.Data
屬性返回的值轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序。
我們可以使用BitConverter.GetBytes和Array.Reverse()
/或 LINQ 的.Reverse()
方法來做同樣的事情。
這就是所有需要的:
int cidr = 23;
var bits = new BitVector32(-1 << (32 - cidr));
要返回位掩碼的十六進(jìn)制表示,只需將其轉(zhuǎn)換為指定十六進(jìn)制格式的字符串:
.NET 中的格式化類型 (MSDN)
Console.WriteLine(bits.Data.ToString("X2"));
=> FFFFFE00
如果需要,將其轉(zhuǎn)換為一種IpAddress格式:
var bytes = BitConverter.GetBytes((uint)bits.Data);
var netMask = new IPAddress(bytes.Reverse().ToArray());
Console.WriteLine(netMask);
=> 255.255.254.0
- 1 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報(bào)