C#如何将short []转换为bool []?

Hoo*_*ony 8 c# arrays boolean short

short[] sBuf = new short[2];
sBuf[0] = 1;
sBuf[1] = 2;

bool[] bBuf = new bool[sBuf.Length * 16];
Buffer.BlockCopy(sBuf, 0, bBuf, 0, sBuf.Length * 2);

Desired result value  
sBuf[0] = 1
bBuf[0] = true, bBuf[1] = false, bBuf[2] = false, bBuf[3] = false...
sBuf[0] = 2
bBuf[16] = false, bBuf[17] = true, bBuf[18] = false, bBuf[19] = false...
Run Code Online (Sandbox Code Playgroud)

但无法正确转换.
我想从short []转换为bool [],但我不知道如何.

das*_*ght 14

假设每个bool代表一个相应的位short(这可能是你将大小乘以16的原因),你可以按如下方式进行转换:

bBuf = sBuf
    .SelectMany(s => Enumerable.Range(0, 16).Select(i => (s & (1<<i)) != 0))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

我们的想法是short通过调用Enumerable.Range,掩盖数字(1 << i),并将结果与​​零进行比较,为每个构造16个布尔值.