好,有一个问题。我已经组装选项的位掩码。基本上我的页面有一个列表框,允许多项选择,在一列整数存储它们(他们的ID值)。有14点总的选择(因此ID VAL 1-15)。我组装成一个位掩码,这样做的原因是因为我不想硬编码在许多的情况下,我想选项添加到数据库表(其中从列表框中填入)。另外,我也不想在14个参数,以我的SQL存储过程来进行发送(因此在14号硬编码)。我可以在这个整数发送和解构它(后面的步骤)。

不过,现在我需要找出哪些位在我的另一个原因整数设置。基本上我有一个属性。在获得从整数(来自用户的选择得到)的列表组装位掩码,并返回该二进制十进制值的整数。下面是位掩码的建筑我组装代码。

//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;

因此,如果第一,第二和第四设置,我的整数11.本作品中,我测试了所有的选择和它返回正确的整数/十进制值。

现在我需要别人帮助我的设置方法。这需要采取小数/整数,我有,找出哪些位设置,并把这些回列表。所以,如果我有11我的价值,我需要投入整数1,2,4的列表。任何人可以帮助我吗?

有帮助吗?

解决方案

您应该使用 BitArray代替;它的位运算,为您和有一个简单的界面。结果 如果你将永远不会需要超过32个布尔值,你也可以使用的 BitVector32,该更小。


要回答你的问题,你需要循环的每个比特(使用简单的一环for),并检查value & (1 << i)ith位是否被设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top