将C#字节转换为位数组

18

是否有预定义的函数可将 byte 转换为 BitArray

一种方法是检查每个 byte 值的每一位,然后执行位运算。我想知道是否有比这更简单的方法。


你应该重新表达你的问题。你想要将字节或字节数组转换为System.Collections.BitArray吗? - KV Prajapati
我的确切情况是将一个字节数组中的3个字节转换。下面描述的方法对我来说是可行的。 - Shamim Hafiz - MSFT
4个回答

45

可以使用适当的BitArray()构造函数,如此处所述

var bits = new BitArray(arrayOfBytes);

您可以使用 new BitArray(new byte[] { yourBite }) 调用它来创建一个包含一个字节的数组。


三个字节怎么样,可以这样说:new BitArray(new byte[] { myBite1, myBite2, myBite2 })。 - Shamim Hafiz - MSFT

8

如果您有一个字节编号或整数等

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

注意:您需要引用System.Linq。

3
解决方案很简单,只需两个指令(在以下代码中标记),使用Convert.ToString(btindx,2)将字节转换为二进制,用零填充结果字符串以形成8位(或长度为8)strBin.PadLeft(8,'0');,并连接所有二进制字符串以形成字节数组的位流。如果需要,还可以形成一个字符串数组来分隔每个字节的二进制表示。
    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;
    }

1
如果BitArray的长度不是字节位数(8)的倍数,那么在从byte[]转换为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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接