开发者

How to set each bit in a byte array

开发者 https://www.devze.com 2023-03-29 16:28 出处:网络
How do I set each bit in the following byte array which has 21 bytes or 168 bits to either zero or one?

How do I set each bit in the following byte array which has 21 bytes or 168 bits to either zero or one?

byte[] logonHours

Thank you very much开发者_开发知识库


Well, to clear every bit to zero you can just use Array.Clear:

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

Setting each bit is slightly harder:

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

If you find yourself filling an array often, you could write an extension method:

public static void FillArray<T>(this T[] array, T value)
{
    // TODO: Validation
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = value;
    }
}


BitArray.SetAll:

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

Note that this copies the data from the byte array. It's not just a wrapper around it.


This may be more than you need, but ...

Usually when dealing with individual bits in any data type, I define a const for each bit position, then use the binary operators |, &, and ^.

i.e.

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

Then you can turn whatever bits you want on and off using the bit operations.

   byte byTest = 0;
   byTest = byTest | bit4;

would turn bit 4 on but leave the rest untouched.

You would use the & and ^ to turn them off or do more complex exercises.

Obviously, since you only want to turn all bits up or down then you can just set the byte to 0 or 255. That would turn them all off or on.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号