我如何使用 BitArray 做一些最基本的事情,为位设置一个值,而不仅仅是位!我开始后悔曾经使用过这个叫做 BitArray 的垃圾。
说我有这样的东西。
public enum RULE
{
NOTHING = 0x0,
FIRST_STEP = 0x1,
FOO_YOU = 0x2,
BAR_FOO = 0x10,
FOO = 0x20,
BAR = 0x40,
FOO_BAR = 0x80,
READY = 0x100,
...//LOTS MORE BITS
FINAL_FLAG_BIT= 0x10000000 //Final bit.. uses the 29th bit.
};
现在说我这样做..
//only use 29 bits to save memory, probably still uses 4 bytes lol.
BitArray rules= new BitArray(29);
//As you can see what I tried to do.
public bool ruleEnabled(RULE i)
{
return rules[(int)i]; //<- this is impossible as it sets BITS not bitmasks.
}
public void setRule(RULE rule, bool b) {
rules.Set((int)rule, b);
}
所以我浪费了大约 30 分钟来实现它,却不知道它的许多限制之一.. 你知道甚至没有任何方法可以将它降低到它的价值.. 不使用CopyTo
所以我最终只使用了 1 个变量(似乎这个解决方案既干净又快速)并且只需要更改 2 种方法setRule
并ruleEnabled
使其正常工作。
private int rules; //uses only 29 of the 32 bits.
public bool ruleEnabled(RULE i)
{
int bits = (int)i;
return (rules & bits) == bits;
}
public void setRule(RULE rule, bool set) {
if (set)
rules |= (int)rule;
else
rules &= ~(int)rule;
}
我的问题是我做对了吗?为什么 BitArray 有用?如果它有这么多的限制..你可以完成它的所有操作,比如AND
OR
NOT
XOR
已经使用&
|
~
^
我猜当您处理更多位时,最好使用 BitArray,然后任何数据类型都可以表示......用于压缩/加密等。