Konvertieren bitstring byte in java
Ich brauche, um jedes bit in 1-byte in Java.
bit7 - 1,
bit6 - 1,
bit5 - 1,
bit4 - 0,
bit3 – 0,
bit2 – 0,
bit1 – 0,
bit0 – 0
Habe ich geschrieben:
byte extra_dop = 0b00000111;
bekam aber folgenden Fehler:
Binär-Literale werden nicht unterstützt in-source 1.5 (Einsatz -Quelle 7 oder
höher zu aktivieren, binäre Literale)
- haben Sie versucht
byte extra_dop = 0111b;
? - Gut, welche Java-version benutzt du, und ist mit Hilfe von Java 7 eine option?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Binary literal eingeführt wurden, in Java7.
Verwenden Sie folgende für die ältere version:
parseByte
stattvalueOf
.Byte.parseByte("11111111", 2);
-> java.lang.NumberFormatException: Value out of rangeWie die Fehlermeldung sagt, das
0b...
syntax gibt es noch nicht in Java 5 (ist das, was Sie zu sein scheinen mit); es wurde mit Java 7. Wenn Sie mit Java 7, stellen Sie sicher, dass Ihre compiler-Einstellungen (in der IDE oder build-Datei) festgelegt sind, so dass es akzeptiert Java 7 syntax.Bits sind normalerweise gezählt von rechts nach Links, so dass, wenn Sie sagen, bit 7 ist 1, bit 6 ist 1, usw. dann würde ich erwarten, dass die Binärzahl zu
11100000
statt00000111
.Schreiben diese im source-code in einer Java-version älter als Java 7, können Sie einfach schreiben Sie es als hexadezimal-oder Dezimalzahl:
Könnten Sie auch
Integer.parseInt()
mit radix 2:(Hinweis: Sie können auch
Byte.parseByte
aber es wird nicht akzeptieren11100000
da es überschreitet den Bereich des unterzeichnetenbyte
- Typ).Das ist nicht die Art, wie wir Dinge tun, in Java. Haben Sie einen Blick auf dieBitSet
Klasse, es ist eine viel bequemer Weg, der Einstellung von bit-flags.Hmpfh. Lassen Sie mich das anders formulieren. Java ist eine objektorientierte Sprache, wo es effizient und Objekt-Orientierte Art, die Dinge in eine mehr Entwickler-freundliche Art und Weise als mit bit-Operatoren. Ich würde vorschlagen, Sie verwenden
BitSet
, wie es macht den code viel lesbarer, und es unterstützt viele Flaggen mehr als eine einfache bit-Maske. Besser?BitSet
ist eine option, mit einem einzigenbyte
Wert ist eine vollkommen legitime option auch.BitSet
, zu anderen Zeiten ist es nicht. Zu wissen, die es gibt Bibliotheken, können Sie eine Entscheidung treffen. Angenommen, wir speichern eine million Einträge wie diese - die Erstellung einer millionBitSet
Objekte kann teuer werden, verglichen mit nur die Schaffung von einer million byte-array. Die OP scheinbar nur speichern will, 8-flags, so dass die "es kann mehr flags" ist das nicht ein Vorteil in diesem Fall. Ich denke, es ist vernünftig, vorzuschlagen, in Sie suchen - aber ich würde das getan haben, als einen Kommentar statt einer Antwort.Es hängt davon ab, was Sie erreichen möchten. Wenn Sie wollen einfach nur den Wert zuzuweisen, der nicht binäre änderte sich dann, was Sie tun, ist nur in Ordnung, sondern zu nutzen, die Funktion, die Sie kompilieren müssen Sie angeben, dass javac erhalten einen Quell-code, entspricht mit java 7 (das ist das, was den Fehler messaging sagt). Um dies zu tun, hängt von der Art und Weise, die Sie kompilieren, wenn Sie mit Netbeans oder Eclipse, dann tun Sie dies auf der Projekt-Eigenschaften-Konfiguration (nur der rechten Maustaste auf das Projekt und schauen Sie sich die Eigenschaften, es öffnet sich ein dialog, ich erinnere mich nicht, gerade jetzt, wo der source-code-Kompatibilität ist in jeder IDE, aber ich bin mir fast sicher, dass es richtig ist, in der Haupt-Bildschirm der dialog).
Allerdings, wenn Sie möchten, Bearbeiten Sie die Nummer, die später mit bit-Operationen sind, dann müssen Sie arbeiten, wie @Sean sagte mit BitSet (eigentlich könnten Sie auch bit-Operationen direkt auf die zahlen, wie wir in C/C++, es ist einfach nicht komfortabel, aber möglich).