スラッシュ表記 (24、30 など) をサブネット マスクに変換するこの (宿題ではない) 演習を検討してください。
a をにコピーするBitArray
とbyte[]
、内部の順序付けによってBitArray
誤った出力が発生します。
たとえば、 の入力ではnumberOfSetBits=24
、ToString()
が返さ255.255.255.0
れます (ビットが対称であるため、これが機能します)。ただし、 を入力すると、予想される ではなく が30
返されます。はい、それが BitArray が子を処理する方法であることを認識しています(この問題については古い議論がありますが、残念ながら解決策はなく、1 つの順序付けが優れている理由についての終わりのない議論です)。255.255.255.63
255.255.255.252
しかし、神への愛のために、このコードを(=63)1111 1100
にマングルするのではなく、それが何であるかを処理する (=252) ようにするにはどうすればよいでしょうか? 0011 1111
そもそもビットを追加する順序を変更する必要があると思いますが、うまくいきません。
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);
}
}
ありがとうございました。