Byte[] 到 BitArray 再返回 Byte[]

zyr*_*kor 5 .net c# visual-studio

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

我知道这Array.CopyTo()可以解决这个问题,但由于 BitArray 在 LSB 中存储值的方式,收到的字节数组与原始字节数组不同。

你如何在 C# 中实现它?

Vik*_*ram 4

这应该可以做到

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;
}
Run Code Online (Sandbox Code Playgroud)

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

// 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");
}
Run Code Online (Sandbox Code Playgroud)

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