Ich habe eine Folge von Einsen und Nullen, die ich in ein Array von Bytes konvertieren möchte.Konvertiere binäre Zeichenfolge in Byte-Array
Zum Beispiel String b = "0110100001101001"
Wie kann ich dies in eine byte[]
der Länge 2 konvertieren?
Ich habe eine Folge von Einsen und Nullen, die ich in ein Array von Bytes konvertieren möchte.Konvertiere binäre Zeichenfolge in Byte-Array
Zum Beispiel String b = "0110100001101001"
Wie kann ich dies in eine byte[]
der Länge 2 konvertieren?
Analysieren Sie es zu einer Ganzzahl in der Basis 2 und konvertieren Sie es dann in ein Byte-Array. In der Tat, da Sie 16 Bits haben, ist es Zeit, die selten verwendete short
auszubrechen.
short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);
byte[] array = bytes.array();
Was passiert, wenn der String zu viele Bits enthält, die er enthalten kann? t selbst in einer 'langen' Variable gehalten werden? –
Das ist sehr cool! Ich wusste es nicht, danke! :) –
Wenn die Zeichenfolge zu groß ist, erhalten Sie eine 'NumberFormatException'. Ich nehme an, dass es für dieses kleine Beispiel weniger als 32 Zeichen enthält. –
Eine weitere einfache Methode ist:
String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();
kann nicht analysiert werden "1110100001101001" –
Siehe http://stackoverflow.com/questions/24158629/bigintegert-tobytearray-returns-purposeful-leading-zeros Sie könnten einige Zeichen Probleme haben. – will
Wenn ich byte [] fspec = new BigInteger ("10000000", 2) .toByteArray(); anzeigen, wird [B @ 3b22cdd0 anstelle des erwarteten Werts angezeigt - warum? – Line
Unter der Annahme, dass Ihre binären String kann durch 8 ohne sich eine Pause unterteilt werden Sie folgende Methode verwenden:
/**
* 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 = new byte[Iterables.size(iterable) ];
Iterator iterator = iterable.iterator();
int i = 0;
while (iterator.hasNext()) {
Integer byteAsInt = Integer.parseInt(iterator.next().toString(), 2);
ret[i] = byteAsInt.byteValue();
i++;
}
return ret;
}
Nicht vergessen um die guava lib zu Ihren Abhängigkeiten hinzuzufügen.
In Android sollten Sie zu App gradle hinzufügen:
compile group: 'com.google.guava', name: 'guava', version: '19.0'
Und das gradle in Projekt hinzufügen:
allprojects {
repositories {
mavenCentral()
}
}
Update 1
This post contains eine Lösung ohne Verwendung von Guava Lib.
Warum von Länge 2? –
@kocko Er hat 16 Bit ... –
Basiert auf String b, wollen Sie ein Byte [] Länge 2 mit '104' in Position 0 und' 105' in Position 1? –