请考虑将斜杠符号(例如 24、30)转换为子网掩码的这个(非家庭作业)练习。
当我将 a 复制BitArray
到byte[]
时,内部排序BitArray
导致输出不正确。
例如,输入numberOfSetBits=24
,ToString()
应该返回255.255.255.0
(这是有效的,因为位是对称的)。但是,30
结果的输入255.255.255.63
而不是预期的255.255.255.252
。是的,我意识到这只是 BitArray 处理它的孩子的方式(有一个关于这个问题的旧讨论,不幸的是没有解决方案,只是关于为什么一个排序会更好的永无止境的争论)。
但是,看在上帝的份上,我怎样才能让这段代码按原样处理1111 1100
(=252)而不是把它改成0011 1111
(=63)?我相信我必须首先更改添加位的顺序,但我无法让它工作。
public class SubnetMask
{
private byte[] parts = new byte[4];
public static SubnetMask FromSlash(int numberOfSetBits)
{
BitArray bits = new BitArray(32);
for (int i = 0; i < numberOfSetBits; i++)
{
bits[i] = true;
}
return new SubnetMask(bits);
}
private SubnetMask(BitArray bits)
{
bits.CopyTo(parts, 0);
}
public override string ToString()
{
return string.Join(".", parts);
}
}
谢谢你。