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

Mais ne peut pas être converti correctement.
Je veux convertir de short [] en bool [], mais je ne sais pas comment.

8
Hoony 6 avril 2017 à 14:26

2 réponses

Depuis la page msdn de Convert.ToBoolean il indique que chaque valeur 0 sera convertie en false et chaque valeur non - 0 en true:

bool[] bBuf = new bool[sBuf.Length];
for(int i = 0; i < sBuf.Length; ++i )
{
    bBuf[i] = Convert.ToBoolean(sBuf[i]);
}

MODIFIER:
En définissant votre bool[] en fonction des bits définis dans la valeur short, vous pouvez utiliser ceci:

const int BITS_PER_BYTE = 8; // amount of bits per one byte

int elementBitsSize = sizeof(short) * BITS_PER_BYTE; // size in bits of one element in array
bool[] bBuf = new bool[sBuf.Length * elementBitsSize]; // new array size

// iterate through each short value
for ( int i = 0; i < sBuf.Length; ++i )
{
    // iterate through bits in that value
    for( int j = 0; j < elementBitsSize; ++j )
    {
        // assign new value
        bBuf[j + i * elementBitsSize] = Convert.ToBoolean(sBuf[i] & (1 << j));
    }
}

Exemple de travail

4
Mateusz 6 avril 2017 à 12:48
// Convert short to bool
bool[] bBuf = Array.ConvertAll(sBuf, n => n != 0);

// Convert short to bit representation bool array
bool[][] bBuf= Array.ConvertAll(arr, n =>
{
    bool[] bits = new bool[16];

    for (int index = 0; index < 16; index++)
    {
        bits[index] = (n & (1 << index)) > 0;
    }

    return bits;
});
1
oviuan 6 avril 2017 à 12:00