Byte []到BitArray并返回Byte []

时间:2017-08-18 14:44:09

标签: c# .net visual-studio

正如标题所述,我正在尝试将字节数组转换为位数组再返回字节数组。

我知道Array.CopyTo()会处理这个问题,但由于BitArray如何在LSB中存储值,所接收的字节数组与原始数组不同。

你如何在C#中解决这个问题?

2 个答案:

答案 0 :(得分:2)

这应该这样做

static byte[] ConvertToByte(BitArray bits) {
    // Make sure we have enough space allocated even when number of bits is not a multiple of 8
    var bytes = new byte[(bits.Length - 1) / 8 + 1];
    bits.CopyTo(bytes, 0);
    return bytes;
}

您可以使用下面的简单驱动程序验证它

// test to make sure it works
static void Main(string[] args) {
    var bytes = new byte[] { 10, 12, 200, 255, 0 };
    var bits = new BitArray(bytes);
    var newBytes = ConvertToByte(bits);

    if (bytes.SequenceEqual(newBytes))
        Console.WriteLine("Successfully converted byte[] to bits and then back to byte[]");
    else
        Console.WriteLine("Conversion Problem");
}

我知道OP知道Array.CopyTo解决方案(与我在这里的解决方案类似),但我不知道为什么会导致任何Bit顺序问题。仅供参考,我使用.NET 4.5.2进行验证。因此我提供了测试用例来确认结果

答案 1 :(得分:1)

要获得BitArray byte[],您只需使用BitArray的构造函数:

BitArray bits = new BitArray(bytes);

要获得byte[]的{​​{1}},有许多可能的解决方案。我认为一个非常优雅的解决方案是使用BitArray方法。只需创建一个新数组并将这些位复制到:

BitArray.CopyTo