zyr*_*kor 5 .net c# visual-studio
正如标题所述,我正在尝试将字节数组转换为位数组,然后再次转换回字节数组。
我知道这Array.CopyTo()可以解决这个问题,但由于 BitArray 在 LSB 中存储值的方式,收到的字节数组与原始字节数组不同。
你如何在 C# 中实现它?
这应该可以做到
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 来验证它。因此我提供了测试用例来确认结果