我有一个任务要用 C# 完成。我有一个子网掩码:255.255.128.0。
我需要找到子网掩码中的位数,在本例中为 17。
但是,我需要能够在 C# 中执行此操作无需使用 System.Net 库(我正在编程的系统无法访问此库)。
看起来这个过程应该是这样的:
1) 将子网掩码拆分为八位字节。
2) 将八位字节转换为二进制。
3) 计算每个 Octet 中 One 的个数。
4) 输出找到的Ones的总数。
但是,我的 C# 很差。是否有人了解 C# 知识可以提供帮助?
最佳答案
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/