2010-12-15 20 views

Antwort

7
Int32 number = 10; 

var array = Convert.ToString(number, 2).Select(s => s.Equals('1')).ToArray(); 

--Edit--

Einsatz von Verlängerungsmethode:

public static class Int32Extensions 
{ 
    public static Boolean[] ToBooleanArray(this Int32 i) 
    { 
     return Convert.ToString(i, 2 /*for binary*/).Select(s => s.Equals('1')).ToArray(); 
    } 
} 

Usage:

var boolArray = number.ToBooleanArray(); 
+0

schöne und saubere Lösung :) –

+0

+1, Sehr elegante Lösung. – jlafay

+3

Wichtig zu beachten, dass dadurch alle führenden Nullen abgeschnitten werden. Ich musste die Vorderseite meines Bool-Arrays auffüllen, bis es 32 war. – captncraig

7

Sie können die BitArray verwenden.

var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray(); 
+0

'new int [yourInt]' 'sollte neu sein int [] {}' yourInt –

+0

Wenn 'yourInt' 255 ist, wird es nicht ein Array mit der Länge von acht erstellen voll von wahr, oder sogar ein Array mit der Länge von 32, wo die letzten acht wahr sind, wird es ein Array mit der Länge von 8160 schaffen, die voller false ist. – Guffa

+0

@Guffa: Es gibt einen Fehler im Code. Siehe @Albin Sunnanbo Kommentar. Wenn wir @ Albins Kommentar korrigieren, dann ist die Array-Größe 32. – dhinesh

12

Ein int sollte gut zu BitVector32 Karte (oder BitArray)

 int i = 4; 
     var bv = new BitVector32(i); 
     bool x = bv[0], y = bv[1], z = bv[2]; // example access via indexer 

aber persönlich würde ich nur Verschiebungen verwenden (>> etc.) und halten sie als int. Die bool[] wäre viel größer

+2

BitVector ...Sie wissen nie, alle Klassen, die innerhalb des Rahmens sind ... danke :) –

0

können Sie die BitArray verwenden leicht eine Sammlung von booleans aus einer Reihe zu bekommen:

var b = new BitArray(new int[] { 255 }); 

Es können aber alle Bits im Wert verwenden, so die oben erhalten Sie eine mit der Länge 32 als int Datentyp ist 32 Bit.

Sie können eine BitArray von Bytes erstellen, die Sie acht booleans von jedem Byte geben würde:

var b = new BitArray(new byte[] { 255 }); 

Sie ein Array erhalten können nur mit den signifikanten Bits durch die führenden Falschen Überspringen:

bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray(); 
+0

@jlafay: Ja, du hast recht, ich korrigiert. – Guffa

+0

+1 für das Überspringen von falses Idee. –

0

Sie können dies in einem zweistufigen Prozess durchführen. Konvertieren Sie zuerst die ganze Zahl in eine binäre (Basis 2) Zeichenfolgendarstellung mit Convert.ToString und durchlaufen Sie dann diese Zeichenfolge, um eine BitArray aufzufüllen.

Zum Beispiel:

int someInt = 7; 
string binaryString = Convert.ToString(someInt, 2); 
BitArray bitArray = new BitArray(binaryString.Length); 
for (int i = 0; i < bitArray.Length; i++) 
{ 
    bitArray[i] = (binaryString[i] == '1'); 
} 
+0

'BitArray' hat einen Konstruktor ein Array von ganzen Zahlen nehmen. –

Verwandte Themen