Konvertieren Sie eine binäre Zeichenfolge in ein Byte-Array

Lesezeit: 3 Minuten

Benutzer-Avatar
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?

  • @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 und 105 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

Benutzer-Avatar
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?

    – Line

    Jun 28, 2017 at 13:25

  • @Line Because you’re displaying it wrong. See What’s the simplest way to print a Java array?

    – Andreas

    Mar 26, 2018 at 16:20


user avatar
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.

1015010cookie-checkKonvertieren Sie eine binäre Zeichenfolge in ein Byte-Array

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy