简体   繁体   中英

Converting C# byte to BitArray

Is there any predefined function available to convert a byte into BitArray ?

One way would be to inspect every bit of the byte value and then perform bitwise operation. I was wondering if there is any way which is more straightforward than this.

Yes, using the appropriate BitArray() constructor as described here :

var bits = new BitArray(arrayOfBytes);

You can call it with new BitArray(new byte[] { yourBite }) to create an array of one byte.

if you have a byte number or even an integer, etc.

BitArray myBA = new BitArray(BitConverter.GetBytes(myNumber).ToArray());

Note: you need a reference to System.Linq

Solution is simple, just two instructions (which are marked in following code), simply convert byte to binary using Convert.ToString(btindx,2) , zero pad the resultant string to 8 bits (or lengths 8), strBin.PadLeft(8,'0'); and concatenate all binary strings to form a bit stream of your byte array, If you like, you can also form an array of strings to separate each byte's binary representation.

    byte[] bt = new byte[2] {1,2};

    string strBin =string.Empty;
    byte btindx = 0;
    string strAllbin = string.Empty;

    for (int i = 0; i < bt.Length; i++)
    {
        btindx = bt[i];

        strBin = Convert.ToString(btindx,2); // Convert from Byte to Bin
        strBin = strBin.PadLeft(8,'0');  // Zero Pad

        strAllbin += strBin;
    }

If the length of the BitArray in question is not intended to be a multiple of the number of bits in a byte (8) you can do something like this to ensure the correct number of bits when converting from byte[] to BitArray :

public static byte[] ToByteArray (this BitArray bits) {
    byte[] ret = new byte[(bits.Length - 1) / 8 + 1];
    bits.CopyTo (ret, 0);
    return ret;
}

public static BitArray ToBitArray (this byte[] bytes, int bitCount) {
    BitArray ba = new BitArray (bitCount);
    for (int i = 0; i < bitCount; ++i) {
        ba.Set (i, ((bytes[i / 8] >> (i % 8)) & 0x01) > 0);
    }
    return ba;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM