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 변수를 사용하여 결국 사용하지 않고 .. 값입니다 만 제대로 작동하려면이 방법 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가 유용할까요? 너무 많은 제한이있는 경우 ... 당신은 내가 당신이 더 많은 비트를 처리 할 때 BitArray이 가장 후 모든 데이터 형식 나타낼 수 사용되는 추측 등 AND
OR
NOT
XOR
이미 &
|
~
^
과의 작업을 모두 수행 할 수 있습니다. . 압축/암호화 등.
당신은 지금 꽤 잘 이해하고있는 것 같습니다. –
Meh yeah 나는이 질문을 게시 한 후 BitArray를 완전히 제거했다.하지만이 질문을하는 다른 사람들을 도울 수 있기를 바란다. 그리고 BitArray로 전환하려고하는 사람들에게 도움이되기를 바란다. – SSpoke