Ich habe eine Zeichenfolge aus Einsen und Nullen, die ich in ein Array von Bytes konvertieren möchte.
Zum Beispiel String b = "0110100001101001"
Wie kann ich das in eine umwandeln byte[]
der Länge 2?
Ryan Jackmann
Ich habe eine Zeichenfolge aus Einsen und Nullen, die ich in ein Array von Bytes konvertieren möchte.
Zum Beispiel String b = "0110100001101001"
Wie kann ich das in eine umwandeln byte[]
der Länge 2?
Jeff Foster
Analysieren Sie es in eine Ganzzahl zur Basis 2 und konvertieren Sie es dann in ein Byte-Array. Da Sie 16 Bit haben, ist es tatsächlich an der Zeit, die selten verwendeten herauszubrechen short
.
short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);
byte[] array = bytes.array();
Was ist, wenn der String zu viele Bits enthält, die nicht einmal in a gehalten werden können long
Variable?
– Luiggi Mendoza
18. Juli 2013 um 15:14 Uhr
Wenn die Zeichenfolge zu groß ist, erhalten Sie eine NumberFormatException
. Ich gehe davon aus, dass es für dieses kleine Beispiel weniger als 32 Zeichen sind.
– Jeff Foster
18. Juli 2013 um 15:17 Uhr
Dann ist dies keine kugelsichere Lösung. Gibt es einen mit einfachem Code oder beinhaltet die manuelle Bearbeitung des String-Inhalts?
– Luiggi Mendoza
18. Juli 2013 um 15:19 Uhr
Ich bin mir nicht sicher, ob das viel einfacher werden könnte? Ob b
hat ein ungültiges Format a NumberFormatException
wird geworfen und es liegt am Angerufenen, den Fehler zu behandeln. Offen für Vorschläge, wie dies verbessert werden kann, aber ich denke, dies ist eine Antwort genug, um den Punkt zu veranschaulichen.
– Jeff Foster
18. Juli 2013 um 15:23 Uhr
@LuiggiMendoza mit BigInteger
da die andere vorgeschlagene Antwort sich um dieses Problem kümmert.
– Steve P.
18. Juli 2013 um 15:29 Uhr
Ein weiterer einfacher Ansatz ist:
String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();
es kann “1110100001101001” nicht analysieren
– Evgeniy Dorofeev
29. August 2013 um 7:03 Uhr
Siehe stackoverflow.com/questions/24158629/… Möglicherweise haben Sie einige Zeichenprobleme.
– Wille
2. Juni 2016 um 18:59 Uhr
Wenn ich Byte anzeige[] fspec = new BigInteger(“10000000”, 2).toByteArray();, zeigt es [B@3b22cdd0 instead of expected value – why?
Jun 28, 2017 at 13:25
@Line Because you’re displaying it wrong. See What’s the simplest way to print a Java array?
Mar 26, 2018 at 16:20
lidox
Assuming that your binary String can be divided by 8 without getting a rest you can use following method:
/**
* Get an byte array by binary string
* @param binaryString the string representing a byte
* @return an byte array
*/
public static byte[] getByteByString(String binaryString){ Iterable iterable = Splitter.fixedLength(8).split(binaryString); Byte[] ret = neues Byte[Iterables.size(iterable) ]; Iterator iterator = iterable.iterator(); int ich = 0; while (iterator.hasNext()) {Integer byteAsInt = Integer.parseInt(iterator.next().toString(), 2); ret[i] = byteAsInt.byteValue(); i++; } Rückgabe zurück; }
Vergessen Sie nicht, die hinzuzufügen Guave lib zu Ihren Abhängigkeiten.
In Android sollten Sie App Gradle hinzufügen:
compile group: 'com.google.guava', name: 'guava', version: '19.0'
Und fügen Sie dies in die Projektstufe ein:
allprojects {
repositories {
mavenCentral()
}
}
Aktualisierung 1
Dieser Beitrag enthält eine Lösung ohne Verwendung von Guava Lib.
@kocko er hat 16 Bit …
– Vincent van der Weele
18. Juli 2013 um 15:13 Uhr
Basierend auf der Zeichenfolge b möchten Sie ein Byte[] Länge 2 mit
104
in Stellung 0 und105
auf platz 1?– Clark Kent
18. Juli 2013 um 15:18 Uhr
mögliches Duplikat von Konvertiere einen String in ein Byte-Array
– Schaschi
25. Juli 2013 um 7:37 Uhr