在C#中,我有一个子网位,需要创建一个子网掩码.我该怎么做



我有一个在C#中完成的任务。我有一个子网名称:192.168.10.0/24

我需要找到子网掩码,在这种情况下,这将是255.255.255.0。

但是,我需要能够在C#中执行此操作。

似乎应该是:

1)将子网名称分为数字和位。

2)将钻头推入我发现的那个(由于将子网掩码转换为"/&quot"符号为" Cisco 0.0.0.0标准"):

var cidr = 24; // e.g., "/24" 
var zeroBits = 32 - cidr; // the number of zero bits 
var result = uint.MaxValue; // all ones 
// Shift "cidr" and subtract one to create "cidr" one bits; 
//  then move them left the number of zero bits. 
result &= (uint)((((ulong)0x1 << cidr) - 1) << zeroBits); 
// Note that the result is in host order, so we'd have to convert 
//  like this before passing to an IPAddress constructor 
result = (uint)IPAddress.HostToNetworkOrder((int)result); 

但是,我遇到的问题是我无法访问我正在工作的系统中包含ipaddress.hosttonetwork命令的库。另外,我的c#很差。有人有c#知识可以提供帮助吗?

您可以用以下内容替换该方法:

static void ToNetworkByteOrder(ref uint n) {
    if(BitConverter.IsLittleEndian) {
        // need to flip it
        n = (
            (n << 24)
            |
            ((n & 0xff00) << 8)
            |
            ((n & 0xff0000) >> 8)
            |
            (n >> 24)
        );
    }
}

这是获取掩码的一种简单方法:

int mask = -1 << (32 - cidr);

您不需要Net组件即可以正确的顺序获取字节,您可以使用BitConverter类:

if (BitConverter.IsLittleEndian) {
  byte[] parts = BitConverter.GetBytes(mask);
  Array.Reverse(parts);
  mask = BitConverter.ToInt32(parts, 0);
}

相关内容

最新更新