72 votes

Convertir un int en un tableau de bits en .NET

Comment puis-je convertir un int en un tableau de bits ?

Si j'ai par exemple un int avec la valeur 3, je veux un tableau qui a la longueur 8 et qui ressemble à ceci :

0 0 0 0 0 0 1 1

Chacun de ces nombres se trouve dans un emplacement séparé du tableau qui a la taille 8.

0 votes

Attends, tu veux convertir le int à un byte ou un bit-array ?

0 votes

Un octet contient 8 bits, donc oui, je veux un tableau qui contient 8 bits, un dans chaque emplacement.

0 votes

Voulez-vous un tableau de true / false ou un tableau de chars rempli avec l'une ou l'autre des valeurs suivantes 1 o 2 ?

3voto

base2 Points 523

Pour convertir votre entrée entière en un tableau de bools de n'importe quelle taille, il suffit d'utiliser LINQ.

bool[] ToBits(int input, int numberOfBits) {
    return Enumerable.Range(0, numberOfBits)
    .Select(bitIndex => 1 << bitIndex)
    .Select(bitMask => (input & bitMask) == bitMask)
    .ToArray();
}

Ainsi, pour convertir un nombre entier en un tableau de bools de 32 bits maximum, il suffit de l'utiliser comme suit :

bool[] bits = ToBits(65, 8); // true, false, false, false, false, false, true, false

Vous pouvez inverser le tableau en fonction de vos besoins.

Array.Reverse(bits);

1voto

Sundeep Points 27
int value = 3;

var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray();

0voto

nim Points 48
    public static bool[] Convert(int[] input, int length)
    {
        var ret = new bool[length];
        var siz = sizeof(int) * 8;
        var pow = 0;
        var cur = 0;

        for (var a = 0; a < input.Length && cur < length; ++a)
        {
            var inp = input[a];

            pow = 1;

            if (inp > 0)
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) == pow;

                    pow *= 2;
                }
            }
            else
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) != pow;

                    pow *= 2;
                }
            }
        }

        return ret;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X