【发布时间】:2012-06-04 03:34:12
【问题描述】:
请考虑将斜线符号(例如 24、30)转换为子网掩码的这个(非家庭作业)练习。
当我将BitArray 复制到byte[] 时,BitArray 的内部排序会导致输出不正确。
例如,输入numberOfSetBits=24,ToString() 应该返回255.255.255.0(这是因为位是对称的)。
但是,30 的输入会导致255.255.255.63 而不是预期的255.255.255.252。
是的,我知道that's just the way a BitArray handles it's children(有一个关于这个问题的old discussion,很遗憾没有解决方案,只是关于为什么一个订购会更好的永无止境的争论)。
但是,看在上帝的份上,我怎样才能得到这段代码来处理 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);
}
}
谢谢。
【问题讨论】:
-
@Mehrdad 不错的一个 - 记下另一个我不知道存在的课程 :-)
-
@ChrisShain:哈哈。我想你的意思是
struct。 :P
标签: c# bit-manipulation bitarray