c# - CIDR マスクを IP マスクに変換する

okwaves2024-01-25  9

CIDR サブネット マスクを IP マスク標準に変換する最も簡単な方法は何ですか?

CIDR のマスクが 24 だとすると、255.255.255.0 を取得する必要があります。

サイズはマスクの先頭の 2 進数 1 の数です。したがって、マスクは 0xFFFFFF00 です

– ジェイドウェン

2020 年 9 月 3 日 12:16

次のことを試してください: int MaskSize = 24; UInt32 hex = (UInt32)Enumerable.Range(0,maskSize).Sum(x => (1 << (31 - x)));文字列マスク = string.Join(".", (hex >> 24).ToString(), ((hex >> 16) & (0xFF)).ToString(), ((hex > ;> 8) & (0xFF)).ToString(), (hex & (0xFF)).ToString());

– ジェイドウェン

2020 年 9 月 3 日 12:25

次の最後の行を作成することもできます: string Mask = string.Join(".", Enumerable.Range(0, 4).Reverse().Select(x => ((hex >>(8 * x)) & 0xFF).ToString()));

– ジェイドウェン

2020 年 9 月 3 日 12:39



------------------------

次のコード スニペットを使用すると、/24 などの CIDR 表記サフィックスを同等の IPv4 ビットマスクに、またはその逆に簡単に変換できます。

public static string CidrToMask(int cidr)
{
    var mask = (cidr == 0)?0:uint.MaxValue << (32 - cidr);
    var bytes = BitConverter.GetBytes(mask).Reverse().ToArray();
    return new IPAddress(bytes).ToString();
}

public static int MaskToCidr(string subnetMask)
{ 
    var address = IPAddress.Parse(subnetMask);
    var bytes = address.GetAddressBytes();
    var cidr = 0;
    foreach (var t in bytes)
    {
        var b = t;
        while (b > 0)
        {
            cidr++;
            b = (byte)(b << 1);
        }
    } 
    return cidr; 
}

2023 年 4 月 13 日 6:43 に回答

fd1

fd1

21

2

銅バッジ 2 個

1

追加のサポート情報により、回答が改善される可能性があります。他の人があなたの答えが正しいことを確認できるように、引用やドキュメントなどの詳細を編集して追加してください。適切な回答を書く方法について詳しくは、ヘルプセンターをご覧ください。

– コミュニティ

ボット

2023 年 4 月 17 日 16:31

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。