Как установить каждый бит в байтовом массиве - PullRequest
2 голосов
/ 18 августа 2011

Как мне установить каждый бит в следующем байтовом массиве, который имеет 21 байт или 168 бит, равным нулю или единице?

byte[] logonHours

Большое спасибо

Ответы [ 3 ]

7 голосов
/ 18 августа 2011

Ну, чтобы очистить каждый бит до нуля, вы можете использовать Array.Clear:

Array.Clear(logonHours, 0, logonHours.Length);

Установка каждого бита немного сложнее:

for (int i = 0; i < logonHours.Length; i++)
{
    logonHours[i] = 0xff;
}

Если вы часто заполняете массив, вы можете написать метод расширения:

public static void FillArray<T>(this T[] array, T value)
{
    // TODO: Validation
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = value;
    }
}
2 голосов
/ 18 августа 2011

BitArray.SetAll

System.Collections.BitArray a = new System.Collections.BitArray(logonHours);
a.SetAll(true);

Обратите внимание, что это копирует данные из байтового массива. Это не просто обертка вокруг него.

1 голос
/ 18 августа 2011

Это может быть больше, чем нужно, но ...

Обычно при работе с отдельными битами в любом типе данных я определяю const для каждой позиции бита, затем использую двоичные операторы |, &,и ^.

т.е.

    const byte bit1 = 1;
    const byte bit2 = 2;
    const byte bit3 = 4;
    const byte bit4 = 8;
                  .
                  .
    const byte bit8 = 128;

Затем вы можете включать и выключать любые биты, которые вы хотите, используя битовые операции.

   byte byTest = 0;
   byTest = byTest | bit4;

включит бит 4, нооставьте остальные нетронутыми.

Вы можете использовать & и ^, чтобы отключить их, или выполнять более сложные упражнения.

Очевидно, поскольку вы хотите только повернуть все биты вверх или вниз, тогда вы можетепросто установите байт на 0 или 255. Это бы выключило или включило их все.

...