2017-03-22 3 views
0

Nehmen wir an, wir haben eine Reihe von Booleschen Werten, einige sind wahr, einige sind falsch. Ich möchte ein ushort erzeugen und die Bits entsprechend dem Array setzen.Codieren Sie Bool-Array als

Ein ushort besteht aus 2 Bytes, - das sind 16 Bits.

So ist der erste bool in dem Array muß das erste Bit der ushort setzen, wenn es wahr ist, andernfalls wird das Bit 0 Dies muss wiederholt werden für jedes Bit in den ushort wäre.

Wie würde ich eine Methode Stub, die eine Reihe von Bools als Eingabe und gibt die codierte ushort? (C#)

Antwort

1

A BitArray könnte besser geeignet sein für Ihren Anwendungsfall: https://msdn.microsoft.com/en-us/library/system.collections.bitarray(v=vs.110).aspx

bool[] myBools = new bool[5] { true, false, true, true, false }; 
BitArray myBA = new BitArray(myBools); 

foreach (var value in myBA) 
{ 
    if((bool)value == true) 
    { 
    } 
    else 
    { 
    } 
} 
+0

Bitte, bitte, _please_ nicht verwenden 'booleanValue == true'. Es ist nicht so gut lesbar, und für Performance-Junkies führt es unnötige Operationen durch, die (wenn auch kleine Mengen) Prozessorzeit verbrauchen. Setzen Sie stattdessen 'booleanValue' direkt in die' if' Anweisungen oder wo auch immer der boolesche Wert verwendet wird. –

2

Sie können die BitConverter Klasse machen (https://msdn.microsoft.com/en-us/library/bb384066.aspx), um von Bytes in einen int zu konvertieren, und Binäroperationen (wie in dieser Stackoverflow Frage: How can I convert bits to bytes?) von Bits zu Bytes konvertieren

Beispiel:

//Bools to Bytes... 
bool[] bools = ... 
BitArray a = new BitArray(bools); 
byte[] bytes = new byte[a.Length/8]; 
a.CopyTo(bytes, 0); 
//Bytes to ints 
int newInt = BitConverter.ToInt32(bytes); //Change the "32" to however many bits are in your number, like 16 for a short 

Dies funktioniert nur für ein int. Wenn Sie also mehrere Ints in einem einzelnen Bit-Array haben, müssen Sie das Array aufteilen, damit dieser Ansatz funktioniert.