2011-03-12 11 views

risposta

46
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]; 

} 
+1

Wow ... Non pensavo che avrebbe funzionato per mettere tutti i bit in un unico valore intero - ma lo fa! – codekaizen

+3

Riferiscilo: http://codereview.stackexchange.com/questions/3796/converting-binary-value-from-bitarray-to-an-int-and-back-in-c/3797#3797 È necessario controllare la lunghezza di bitArray – Ngm

+0

Aggiunto controllo degli argomenti. –

7
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; 
} 
+0

Puoi spiegare perché l'OP dovrebbe usare questa soluzione rispetto all'altra? –

+0

@AustinHenley Ho scritto questa soluzione a scopo di debug. Posso scorrere il mio codice per vedere come viene convertito il numero. Non sono sicuro che tu possa farlo con la prima soluzione. – K4KNOWLEDGE

+1

È anche interessante sapere che la prima soluzione non è disponibile su WinRT (probabilmente a causa del modo in cui i processori ARM salvano i numeri) –

0

refer a questo post (# 43.935.747). Un valore X è breve. Ho impostato due bit (6 e 10) come di seguito: short 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); 

Ora vorrei leggere il tutti i bit specifico dal valore X e metterlo in un array o un tipo po 'come bool Val1 = bit1, bool Val2 = bit2 ....

I Sono un principiante e penso che sia abbastanza semplice per voi ragazzi ..

+0

OK ma dovresti renderlo '| =' e '(short) (1 << bitToSet)' per renderlo più ovvio a colpo d'occhio. Non è come se questo codice fosse incomprensibile, ma si basa sulla combinazione di alcune "coincidenze scelte con cura" invece di fare semplicemente la cosa giusta. – harold