将网络掩码转换为前缀长度

时间:2018-08-16 16:47:40

标签: c# bitarray netmask

我需要将网络掩码(存储为IPAddress)转换为前缀长度(存储为整数)。由于字节的字节序问题,我的方法不起作用:

using System;
using System.Collections;
using System.Net;

namespace NetmaskTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var netmask = IPAddress.Parse("255.255.252.0");
            var bitArray = new BitArray(netmask.GetAddressBytes());
            Console.Write("Is    : ");
            foreach (bool bit in bitArray)
            {
                Console.Write(bit ? 1 : 0);
            }
            Console.WriteLine();
            Console.WriteLine("Should: 11111111111111111111110000000000");
            Console.ReadKey();
        }
    }
}

输出:

Is    : 11111111111111110011111100000000
Should: 11111111111111111111110000000000

如图所示,第三个字节(而不是整个BitArray)存储为小字节序,但是我显然需要将所有设置的位存储在一起以可靠地对其进行计数。考虑到主机字节顺序,最好的方法是什么?

0 个答案:

没有答案