如何设置字节数组中的每个位

时间:2011-08-18 18:57:06

标签: c# bytearray

如何将以下字节数组中的21位或168位的每个位设置为0或1?

byte[] logonHours

非常感谢

3 个答案:

答案 0 :(得分:7)

好吧,要将每一位清零,您只需使用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;
    }
}

答案 1 :(得分:2)

BitArray.SetAll

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

请注意,这会复制字节数组中的数据。它不仅仅是它的包装。

答案 2 :(得分:1)

这可能超出您的需要,但......

通常在处理任何数据类型中的各个位时,我为每个位位置定义一个const,然后使用二元运算符|,&amp;和^。

    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位,但其余部分保持不变。

你会使用&amp;和^关闭它们或做更复杂的练习。

显然,由于您只想将所有位向上或向下翻转,因此您可以将字节设置为0或255.这样可以将它们全部关闭或打开。

相关问题