Не очень сложно дублировать функциональность BitArray
. Во-первых, если вам нужно меньше 65 бит, то вы можете сделать это с long
или меньше.
Чтобы установить отдельный бит:
void Set(ref long ba, int bit)
{
ba |= 1L << bit;
}
Чтобы немного очистить:
void Clear(ref long ba, int bit)
{
long mask = 1L << bit;
mask = ~mask;
ba &= mask;
}
Чтобы узнать, установлен ли бит:
bool IsSet(long ba, int bit)
{
long mask = 1L << bit;
return (ba & mask) != 0;
}
Если у вас более 64 бит, вам нужно будет создать массив (byte[]
, вероятно) и выполнить деление, чтобы определить, какой байт / бит вы хотите изменить. Приведенные выше методы будут работать при условии, что вы измените значение long
на byte
.
Например, если у вас есть:
byte[] myBytes = new byte[128];
У вас есть 1024 бита.
Чтобы установить бит:
void Set (int bit)
{
int byte = bit/8;
int bitIndex = bit%8;
myBytes[byte] |= (byte)(1 << bitIndex);
}
Другие методы используют ту же математику для получения байтового и битового индекса, а установка, очистка и проверка битов такие же, как в примере long
выше.