2011-03-12 16 views

Odpowiedz

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 ... Nie sądziłem, że to działa, aby umieścić wszystkie bity w jednej wartości całkowitej - ale tak jest! – codekaizen

+3

Skorzystaj z tego: http://codereview.stackexchange.com/questions/3796/converting-binary-value-od-bitarray-to-an-int-and-back-in-c/3797#3797 Musisz sprawdzić długość z bitArray – Ngm

+0

Dodano sprawdzanie argumentów. –

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

Czy możesz wyjaśnić, dlaczego OP powinien używać tego w stosunku do innego rozwiązania? –

+0

@AustinHenley Napisałem to rozwiązanie do celów debugowania. Mogę przejść przez mój kod, aby przekonać się, jak konwertowany jest ten numer. Nie jestem pewien, czy możesz to zrobić za pomocą pierwszego rozwiązania. – K4KNOWLEDGE

+1

Warto również wiedzieć, że pierwsze rozwiązanie nie jest dostępne na WinRT (prawdopodobnie z powodu sposobu, w jaki procesory ARM zapisują numery). –

0

nawiązujący do tego postu (# 43935747). Wartość X to krótka wartość, dla której ustawiłem dwa bity (6 i 10), jak poniżej: krótka 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); 

Teraz chciałbym przeczytać specyficzna wszystkie bity od wartości X i umieścić go do tablicy lub typu trochę jak bool VAL1 = Bit1, bool wart2 = Bit2 ....

I Jestem początkującym i myślę, że to jest całkiem proste dla ciebie guyes ..

+0

OK, ale powinieneś zrobić '| =' i '(short) (1 << bitToSet)', aby było to bardziej oczywiste na pierwszy rzut oka. To nie tak, że ten kod jest niezrozumiały, ale opiera się na kombinacji "starannie wybranych zbiegów okoliczności", zamiast oczywiście robić to, co trzeba. – harold