Konvertieren bool[] byte[]
Ich habe eine List<bool>
die ich konvertieren möchten byte[]
. Wie mache ich das?
list.toArray()
schafft eine bool[]
.
- Was in der Liste?
- Wollen Sie 3 bools zu werden 1 byte oder 3 Byte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier gibt ' s zwei Ansätze, je nachdem, ob Sie möchten, Verpacken Sie die bits in bytes, oder haben so viele bytes, wie original bit:
int bytes = (bools.Length + 7) / 8;
Herstellung second increment-Zeile überflüssig. Auch schneller (nur eine division im Vergleich zu division + modulo)byte
ist nicht gemacht für das speichern einerbit
Können Sie mit LINQ. Dies ist nicht effizient, aber einfach sein. Ich nehme an, Sie wollen ein byte pro bool.
Marc ' s Antwort ist gut, schon, aber...
Vorausgesetzt Sie sind die Art von person, die bequem ist zu tun-bit-twiddling, oder wollen einfach nur um weniger code zu schreiben und squeeze-out etwas mehr Leistung, dann ist dieser code hier ist für Sie, guter Herr /Frau:
Tut es genau das gleiche wie Marc ' s code, es ist nur mehr lapidar.
Natürlich, wenn wir wirklich wollen, gehen alle aus wir ihn ausrollen zu...
...und wenn wir schon dabei sind, können Sie werfen eine Kurve ball auf den Rückgabetyp!
Tipp: Wie Sie sehen können ist der code für die Rückgabe eines
byte[]
als Kommentare. Kommentieren Sie einfach die beiden yield-Anweisungen statt, wenn es das ist, was Sie wollen/brauchen.Drehte Hinweise:
Verschiebung
x >> 3
ist ein billigerx /8
.Maskierung
x & 0x07
ist ein billigerx % 8
.Maskierung
x & ~0x07
ist ein billigerx - x % 8
.Edit:
Hier finden Sie einige Beispiel-Dokumentation:
Wenn Sie keine Kontrolle über die Art der Liste, versuchen Sie, es in eine Liste, die dann produzieren die byte[] auf ToArray(). Wenn Sie eine ArrayList, die Sie verwenden können:
Aus, um die Liste könnte man erstellen mit dein angegebener Liste-iterator wie input für den Konstruktor, und dann produzieren die ToArray()? Oder kopieren Sie jedes Element, casting, um ein neues byte von bool?
Einige Infos, welche Art von Liste es ist vielleicht helfen.
Haben Sie einen Blick auf die BitConverter Klasse. Abhängig von der genauen Natur Ihrer Anforderung, es kann Ihr problem lösen ganz sauber.
Anderen LINQ-Ansatz, weniger wirksam als @hfcs101, sondern würde einfach die Arbeit für andere Wert-Typen sowie:
Oder die
IEnumerable
Ansatz AnorZaken Antwort:Und die nach dem Auspacken, wo
paddingEnd
bedeutet, dass die Menge an bits zu verwerfen, aus dem letzten byte zu packen: