1 回答
TA贡献1786条经验 获得超11个赞
因为我们从右边开始计算位,从左边开始计算项目;例如对于
BitArray myBitArray = new BitArray(new byte[] { 10 });
我们有(byte 10从右数):
10 = 00001010 (binary)
^
second bit (which is 1)
当相应数组的项目我们从左边开始计数时:
{false, true, false, true, false, false, false, false}
^
corresponding second BitArray item (which is true)
这就是为什么如果我们想要一个byte后面的数组,我们必须Reverse每个byte表示,例如Linq解决方案
using System.Collections;
using System.Linq;
...
BitArray myBitArray = ...
byte[] myByte = myBitArray
.OfType<bool>()
.Select((value, index) => new { // into chunks of size 8
value,
chunk = index / 8 })
.GroupBy(item => item.chunk, item => item.value)
.Select(chunk => chunk // Each byte representation
.Reverse() // should be reversed
.Aggregate(0, (s, bit) => (s << 1) | (bit ? 1 : 0)))
.Select(item => (byte) item)
.ToArray();
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报