如何使用BitArray來做一些最基本的事情,比如設置一個值,而不僅僅是位!我開始後悔曾經使用這種叫做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是最好的使用,那麼任何數據類型可以代表。 。用於壓縮/加密等。
好像你現在有一個很好的理解。 –
呃是的我發佈這個問題後,我完全刪除了BitArray ..但我希望這可以幫助其他人googling這個問題,並與BitArray努力希望切換。 – SSpoke