c# - 在 C# 中计算子网掩码中的位数

标签 c# mask subnet

我有一个任务要用 C# 完成。我有一个子网掩码:255.255.128.0。

我需要找到子网掩码中的位数,在本例中为 17。

但是,我需要能够在 C# 中执行此操作无需使用 System.Net 库(我正在编程的系统无法访问此库)。

看起来这个过程应该是这样的:

1) 将子网掩码拆分为八位字节。

2) 将八位字节转换为二进制。

3) 计算每个 Octet 中 One 的个数。

4) 输出找到的Ones的总数。

但是,我的 C# 很差。是否有人了解 C# 知识可以提供帮助?

最佳答案

比特计数算法取自: http://www.necessaryandsufficient.net/2009/04/optimising-bit-counting-using-iterative-data-driven-development/

string mask = "255.255.128.0";
int totalBits = 0;
foreach (string octet in mask.Split('.'))
{
    byte octetByte = byte.Parse(octet);
    while (octetByte != 0)
    {
        totalBits += octetByte & 1;     // logical AND on the LSB
        octetByte >>= 1;            // do a bitwise shift to the right to create a new LSB
    }                
}
Console.WriteLine(totalBits);

使用了文章中最简单的算法。如果性能至关重要,您可能需要阅读这篇文章并使用其中更优化的解决方案。

关于c# - 在 C# 中计算子网掩码中的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711522/

相关文章:

c# - 如何停止ThreadPool中的线程?

c# - sbyte[] 可以神奇地转换为 byte[]

css - 使用 $linkImg 变量向图标添加圆 Angular mask

javascript - 子网掩码函数

c# - Linq to NHibernate ThenFetch 多个属性

ios - 向 CALayer 添加半透明蒙版?

iphone - layer.renderInContext 没有考虑 layer.mask 吗?

mysql - 检查IP是否在子网中

kubernetes - 您可以在 GKE 集群之间共享 pod 和服务 secondary_ip_range 吗?

c# - C#中XML注释有什么用