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...

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

最佳答案

假设每个bool代表其对应的short中的一位(这可能是您将大小乘以16的原因),则可以执行以下转换:

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

这个想法是通过调用 short 为每个Enumerable.Range构造16个 boolean 值,用(1 << i)屏蔽数字,然后将结果与零进行比较。

09-19 23:21