【问题标题】:Converting C# byte to BitArray将 C# 字节转换为 BitArray
【发布时间】:2012-06-27 14:43:24
【问题描述】:

是否有任何预定义函数可用于将byte 转换为BitArray

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

【问题讨论】:

  • 您应该重新表述您的问题。是否要将字节或字节数组转换为 System.Collections.BitArray?
  • 我的确切情况是从一个字节数组转换 3 个字节。下面描述的方法对我有用。

标签: c# byte bitarray


【解决方案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;
}

【讨论】:

    【解决方案2】:

    解决方案很简单,只需两条指令(在以下代码中标记),只需使用 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;
        }
    

    【讨论】:

      【解决方案3】:

      如果你有字节数甚至整数等

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

      注意:您需要引用 System.Linq

      【讨论】:

        【解决方案4】:

        是的,如here 所述,使用适当的BitArray() constructor

        var bits = new BitArray(arrayOfBytes);
        

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

        【讨论】:

        • 一次三个字节怎么样,比如:new BitArray(new byte[] { myBite1, myBite2, myBite2 })
        猜你喜欢
        • 1970-01-01
        • 2016-09-06
        • 2017-05-31
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 2014-11-03
        • 1970-01-01
        相关资源
        最近更新 更多