質問

さて、質問があります。私はオプションのために少しマスクを組み立てました。基本的に、私のページには、整数(ID値)のリストにそれらを保存する複数の選択を可能にするリストボックスがあります。合計14の選択肢があります(ID val 1-15)。私がこれを少しマスクに組み込んでいる理由は、データベーステーブル(リストボックスが入力する場所)にオプションを追加したい場合に備えて、数字でハードコードをしたくないからです。また、SQLストアドプロシージャに14のパラメーターを送信したくありません(したがって、14番でハードコード)。この整数を送信して解体することができます(後のステップ)。

ただし、今のところ、別の理由で整数に設定されているビットを見つける必要があります。基本的に私は財産を持っています。 GETは、整数のリスト(ユーザー選択から得られた)からビットマスクを組み立て、そのバイナリ小数値の整数を返します。これがビットマスクの構築のための私の組み立てられたコードです。

//optsNum is my integer list. This is the list containing the ID nums of the selections.
//so if the user selects the first, second, and fourth option, the list contains 1,2,4 (count 3)
//typeCount is an integer of the amount of options in the list box
int total = 0;
for (int c = 0; c < optsNum.Count(); ++c)
{
    for (int i = 0; i <= typeCount; i++)
    {
        if ((i + 1) == optsNum[c})
            total += (1 << i);
    }
}
return total;

したがって、1番目、2番目、4番目が設定されている場合、整数は11です。これは機能し、すべての選択をテストし、正しい整数/小数値を返しています。

今、私は自分のセット方法を作るのを手伝う必要があります。これには、私が持っている小数/整数を取得し、どのビットが設定されているかを見つけて、それらをリストに戻す必要があります。したがって、私が私の価値として11を持っている場合、私は整数1,2,4のリストに入れる必要があります。誰かが私を助けることができますか?

役に立ちましたか?

解決

を使用する必要があります BitArray クラス 代わりは;それはあなたのためにビットワイズ操作を行い、シンプルなインターフェイスを持っています。
32を超えるブリアンを必要としない場合は、 BitVector32 クラス, 、それは小さくなっています。


あなたの質問に答えるには、すべてのビットをループする必要があります(単純なaを使用してください for ループ)と確認します value & (1 << i) を確認するために iビットが設定されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top