正如标题所述,我正在尝试将字节数组转换为位数组再返回字节数组。
我知道Array.CopyTo()
会处理这个问题,但由于BitArray如何在LSB中存储值,所接收的字节数组与原始数组不同。
你如何在C#中解决这个问题?
答案 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