web-dev-qa-db-ja.com

BitArrayを単一のintに変換するにはどうすればよいですか?

BitArray を単一のintに変換するにはどうすればよいですか?

30
private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];

}
54
Luca Fagioli
private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}
8
K4KNOWLEDGE

このバージョン:

  • 最大64ビットで動作します
  • bitArray実装の詳細に関する知識に依存しない
  • メモリを不必要に割り当てない
  • 例外をスローしない
  • 合理的なパフォーマンス以上のものであるべき

実装:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}
3
William Casarin

この投稿を参照(#43935747)。値Xは、以下のように2ビット(6と10)を設定した短いtpeです。short X = 1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

ここで、値Xから特定のすべてのビットを読み取り、配列またはbool Val1 = bit1、bool Val2 = bit2 ....のようなビット型に入れたいと思います。

私は初心者です。皆さんにとってはとても簡単だと思います。

0
Esmael