Konvertiere ein Byte in ein boolesches Array der Länge 4 in Java

8

Ich muss ein Byte in ein Array von 4 Booleans in Java konvertieren. Wie könnte ich darüber gehen?

    
Agrajag9 17.06.2010, 00:35
quelle

2 Antworten

11

Nach Michael Petrottas Kommentar zu Ihrer Frage müssen Sie entscheiden, welche Bits im 8-Bit-Byte für das resultierende boolesche Array getestet werden sollen. Nehmen wir zu Demonstrationszwecken an, Sie möchten die vier rechten Bits, dann sollte so etwas funktionieren:

%Vor%

Die hexadezimalen Werte ( 0x01 , 0x02 usw.) in diesem Beispiel sind spezielle Bitmasken, bei denen nur ein einzelnes Bit an der gewünschten Stelle gesetzt ist; Also hat 0x01 nur das am weitesten rechts liegende Bit, 0x08 hat nur das Bit von rechts nach rechts gesetzt. Durch Testen des gegebenen Bytes gegen diese Werte mit dem bitweisen AND-Operator ( & ) erhalten Sie diesen Wert zurück, wenn das Bit gesetzt ist, oder Null, wenn nicht. Wenn Sie andere Bits als die rechten vier überprüfen möchten, müssen Sie verschiedene Bitmasken erstellen.

    
maerics 17.06.2010, 00:53
quelle
3

Zur Spezifikation

Andere richten einen sehr gültigen Punkt ein: Byte.SIZE == 8 . Das heißt, es gibt 8 Bits in byte . Sie müssen definieren, wie Sie 8 Bits in 4 boolean -Werte abbilden möchten. Ansonsten können wir nur raten, was Sie versuchen zu tun.

Ein BitSet

Unabhängig davon, wie Sie diese Zuordnung vornehmen, ist es jedoch unwahrscheinlich, dass boolean[] wirklich die beste Darstellung ist. Ein java.util.BitSet könnte besser sein. Hier ist ein Beispiel:

%Vor%

Der obige Code verwendet die Standard-Bit-Prüfmethode, um byte in BitSet zu konvertieren. Beachten Sie, dass für ein (byte) 10 die Bits 1 und 3 gesetzt sind (d. H.% Co_de%, wobei 10 = 2^1 + 2^3 für die Potenzierung steht).

Das Beispiel zeigt auch, wie eine ^ / Vereinigungsoperation für or ausgeführt wird.

Ein BitSet

Möglicherweise ist eine andere anwendbare Datenstruktur eine EnumSet , Dies ist eine EnumSet Implementierung, die für Set optimiert wurde. Hier ist ein Beispiel:

%Vor%

Siehe auch

  • Effektive Java 2. Ausgabe, Punkt 32: Verwenden Sie enum anstelle von Bitfeldern
polygenelubricants 17.06.2010 12:12
quelle

Tags und Links