如何将以下字节数组中的21位或168位的每个位设置为0或1?
byte[] logonHours
非常感谢
答案 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)
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.这样可以将它们全部关闭或打开。