Zum Beispiel kann für 1, 2, 128, 256
die Ausgabe (16 Stellen) sein:
0000000000000001
0000000000000010
0000000010000000
0000000100000000
Ich habe es versucht
String.format("%16s", Integer.toBinaryString(1));
Es werden Leerzeichen für die linke Polsterung eingefügt:
` 1'
Wie 0
s zum Polstern setzen. Ich konnte es in Formatter nicht finden . Gibt es einen anderen Weg, es zu tun?
PS In diesem Beitrag wird beschrieben, wie Ganzzahlen mit linkem 0-Abstand formatiert werden, jedoch nicht für die binäre Darstellung.
java
binary
string-formatting
Khachik
quelle
quelle
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Antworten:
Ich denke, das ist eine suboptimale Lösung, aber Sie könnten es tun
quelle
Returns a string representation of the integer argument as an unsigned integer in base 2.
In java.util.Formatter ist keine binäre Konvertierung integriert. Ich würde Ihnen raten, entweder String.replace zu verwenden, um Leerzeichen durch Nullen zu ersetzen, wie in:
Oder Ihre eigene Logik zu konvertieren ganzen Zahlen in binärer Darstellung mit zusätzlichen links padding irgendwo entlang der in bestimmten Linien implementieren diese so. Wenn Sie zum Formatieren wirklich Zahlen übergeben müssen, können Sie Ihre Binärdarstellung in BigInteger konvertieren und diese dann mit führenden Nullen formatieren. Dies ist jedoch zur Laufzeit sehr kostspielig, wie in:
quelle
Sie können Apache Commons StringUtils verwenden . Es bietet Methoden zum Auffüllen von Zeichenfolgen:
quelle
Ich habe alle Arten von Methodenaufrufen ausprobiert, die ich vorher nicht wirklich verwendet habe, um diese Arbeit zu machen. Sie haben mit mäßigem Erfolg funktioniert, bis ich an etwas dachte, das so einfach ist, dass es vielleicht funktioniert, und es hat funktioniert!
Ich bin sicher, es wurde schon früher darüber nachgedacht, nicht sicher, ob es für lange Zeichenfolgen von Binärcodes gut ist, aber es funktioniert gut für 16-Bit-Zeichenfolgen. Ich hoffe es hilft!! (Beachten Sie, dass der zweite Code verbessert wurde.)
Vielen Dank an Will für die Verbesserung dieser Antwort, damit sie ohne Schleife funktioniert. Das ist vielleicht etwas ungeschickt, aber es funktioniert. Bitte verbessern Sie es und kommentieren Sie es zurück, wenn Sie können.
quelle
binString.length()
und 16 verwendet wird, um eine Zeichenfolge zu erstellen, und diese Zeichenfolge dann an binString angehängt wird, anstatt eine Schleife zu erstellen. Stackoverflow.com/a/2804866/1353098Hier eine neue Antwort für einen alten Beitrag.
Versuchen Sie Folgendes, um einen Binärwert mit führenden Nullen auf eine bestimmte Länge aufzufüllen:
Wenn
len = 4
undval = 1
,die Zeichenfolge zurückgibt
"10001"
, dannverwirft das allererste Zeichen. So erhalten wir, was wir wollen:
Wenn
val
es wahrscheinlich negativ ist, versuchen Sie lieber:quelle
Eine einfachere Version der Idee von user3608934 "Dies ist ein alter Trick. Erstellen Sie eine Zeichenfolge mit 16 Nullen und fügen Sie dann die zugeschnittene Binärzeichenfolge hinzu, die Sie erhalten haben."
quelle
Ich kenne keine "richtige" Lösung, aber ich kann Ihnen einen schnellen Patch vorschlagen.
Ich habe es gerade versucht und gesehen, dass es gut funktioniert.
quelle
%32s
?Versuchen...
Ich denke nicht, dass dies der "richtige" Weg ist, dies zu tun ... aber es funktioniert :)
quelle
0000001111111111
für den Eingabewert.1023
Jeder größere Wert erzeugt die Ausgabe, austoBinaryString(1024)
der er10000000000
stammt zu groß für dieparseInt(...)
Somit funktioniert die Eingabe nur für 1K von 64K möglichen EingabewertenEine naive Lösung, die funktionieren würde
Eine andere Methode wäre
Dies erzeugt eine 16-Bit-Zeichenfolge der Ganzzahl 5
quelle
Ab Java 11 können Sie die Wiederholungsmethode (...) verwenden:
Oder wenn Sie eine 32-Bit-Darstellung einer Ganzzahl benötigen:
quelle
Dies ist ein alter Trick. Erstellen Sie eine Zeichenfolge mit 16 Nullen und fügen Sie dann die zugeschnittene Binärzeichenfolge hinzu, die Sie aus String.format ("% s", Integer.toBinaryString (1)) erhalten haben, und verwenden Sie die 16 Zeichen ganz rechts, wobei Sie alle führenden Zeichen entfernen Nullen. Besser noch, machen Sie eine Funktion, mit der Sie angeben können, wie lange eine Binärzeichenfolge Sie möchten. Natürlich gibt es wahrscheinlich eine Unmenge anderer Möglichkeiten, dies zu erreichen, einschließlich Bibliotheken, aber ich füge diesen Beitrag hinzu, um einem Freund zu helfen :)
quelle
Ich würde meine eigene util-Klasse mit der folgenden Methode schreiben
}}
Ausgabe:
Der gleiche Ansatz könnte auf alle integralen Typen angewendet werden. Achten Sie auf die Art der Maske
long mask = 1L << i;
quelle
Diese Methode konvertiert ein int in einen String, Länge = Bits. Entweder mit Nullen aufgefüllt oder mit den höchstwertigen Bits abgeschnitten.
quelle
Sie können lib https://github.com/kssource/BitSequence verwenden . Es akzeptiert eine Zahl und gibt eine beliebige Zeichenfolge zurück, aufgefüllt und / oder gruppiert.
quelle
str[i].length()
ist die Länge der Zahl, sagen wir, 2 in binär ist 01, was die Länge 2 ist, ändern Sie 4 auf die gewünschte maximale Länge der Zahl. Dies kann auf O (n) optimiert werden. mit continue.quelle
// Unten werden die richtigen Größen behandelt
quelle
quelle
numB
undnum
sind gleich und in keiner Weise unterschiedlich