Как мне использовать 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 лучше всего использовать, когда вы имеете дело с большим количеством битов, чем может представлять любой тип данных ... для сжатия / шифрования и т. Д. *