16

是否有任何预定义的函数可用于将 a 转换byteBitArray

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

4

4 回答 4

41

是的,使用此处描述的适当BitArray()构造函数

var bits = new BitArray(arrayOfBytes);

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

于 2012-06-26T09:48:58.793 回答
8

如果你有一个字节数甚至一个整数等。

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

注意:您需要参考 System.Linq

于 2012-11-01T16:51:36.273 回答
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;
    }
于 2016-10-13T13:16:47.143 回答
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;
}
于 2020-08-21T20:08:15.663 回答