Konvertiere bool [] in Byte []

8

Ich habe eine List<bool> , die ich in eine byte[] umwandeln möchte. Wie mache ich das? list.toArray() erstellt ein bool[] .

    
Wouter Huysentruit 03.04.2009, 08:40
quelle

7 Antworten

24

Hier sind zwei Ansätze, je nachdem, ob Sie die Bits in Bytes packen möchten oder so viele Bytes wie die ursprünglichen Bits haben:

%Vor%     
Marc Gravell 03.04.2009, 08:53
quelle
3

Sie können LINQ verwenden. Dies wird nicht effizient sein, wird aber einfach sein. Ich nehme an, dass Sie ein Byte pro Bool wollen.

%Vor%     
hfcs101 03.04.2009 08:58
quelle
1

Marc's Antwort ist schon gut, aber ...

Unter der Annahme, dass Sie die Art von Person sind, die mit Bit-Twiddling vertraut ist, oder einfach weniger Code schreiben möchte und etwas mehr Leistung herausquetscht, dann diesen Code hier ist für dich gut, Herr / Frau:

%Vor%

Es macht genau dasselbe wie Marc's Code, es ist nur knapper.

Natürlich, wenn wir wirklich alles rausgehen wollen, könnten wir es auch ausrollen ...
... und während wir dabei sind, werfen wir einen Kurvenkugel auf den Rückgabetyp!

%Vor%

Tipp: Wie Sie sehen können, habe ich den Code für die Rückgabe eines byte[] als Kommentar eingefügt. Kommentieren Sie einfach die beiden yield-Anweisungen, wenn Sie das wollen / brauchen.

Twiddling-Tipps:
Shifting x >> 3 ist ein billiger x / 8 .
Masking x & 0x07 ist ein billiger x % 8 .
Masking x & ~0x07 ist ein billiger x - x % 8 .

Bearbeiten: Hier ist eine Beispieldokumentation:

%Vor%     
AnorZaken 12.04.2016 12:05
quelle
0

Wenn Sie irgendeine Kontrolle über den Listentyp haben, versuchen Sie, ihn zu einer Liste zu machen, die dann das Byte [] in ToArray () erzeugt. Wenn Sie eine ArrayList haben, können Sie Folgendes verwenden:

%Vor%

Um die Liste zu erhalten, könnten Sie eine mit Ihrem nicht spezifizierten Listeniterator als Eingabe für den Konstruktor erstellen und dann die ToArray ()? Oder kopiere jedes Element, indem du von bool auf ein neues Byte wirfst?

Einige Informationen über die Art der Liste könnten helfen.

    
Richard Watson 03.04.2009 08:56
quelle
0

Sehen Sie sich die BitConverter -Klasse an. Abhängig von der genauen Art Ihrer Anforderung, kann es Ihr Problem ziemlich sauber lösen.

    
dommer 03.04.2009 08:58
quelle
0

Ein anderer LINQ-Ansatz, der weniger effektiv ist als @ hfcs101, aber auch für andere Werttypen geeignet wäre:

%Vor%     
Joao Milasch 04.01.2016 17:55
quelle
0

Oder der Ansatz von IEnumerable zu AnorZakens Antwort :

%Vor%

Und das entsprechende Entpacken, wobei paddingEnd die Anzahl der Bits bedeutet, die vom letzten zu entpackenden Byte zu verwerfen sind:

%Vor%     
Bruno Zell 26.08.2017 00:18
quelle

Tags und Links