Comment puis-je convertir BitArray en single int?

Comment puis-je convertir des BitArray pour un seul int? Le moyen le plus rapide pls...

27
demandé sur Igor Kustov 2011-03-12 17:46:40

4 réponses

private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];

}
48
répondu Luca Fagioli 2013-01-02 23:09:11
private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}
7
répondu K4KNOWLEDGE 2012-08-12 08:22:30

Reffering à ce poste (#43935747). Une valeur X est courte tpe que je mets deux bits (6 et 10) comme ci-dessous: court X = 1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

Maintenant, je voudrais lire les bits spécifiques de la valeur X et le mettre dans un tableau ou un type de bit comme bool Val1 = bit1, bool Val2 = bit2....

Je suis un débutant et je pense qu'il est assez simple pour vous guyes..

0
répondu Esmael 2017-05-12 11:00:01

Cette version:

  • fonctionne jusqu'à 64 bits
  • ne repose pas sur la connaissance des détails D'implémentation de BitArray
  • n'alloue pas inutilement de la mémoire
  • ne lance aucune exception (n'hésitez pas à ajouter une vérification si vous attendez plus de bits)
  • devrait être plus que raisonnablement performant

Mise en œuvre:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}
0
répondu William Casarin 2018-07-20 16:53:13