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...
But can not be converted correctly.
I want to convert from short [] to bool [], but I don't know how.
Assuming that each bool
represents a bit from its corresponding short
(which is presumably why you multiplied the size by 16) you can do the conversion as follows:
bBuf = sBuf
.SelectMany(s => Enumerable.Range(0, 16).Select(i => (s & (1<<i)) != 0))
.ToArray();
The idea is to construct 16 booleans for each short
by calling Enumerable.Range
, masking the number with (1 << i)
, and comparing the result to zero.