У меня есть строка из них и нули, которые я хочу преобразовать в массив байтов.Преобразование двоичной строки в байтовый массив
Например, String b = "0110100001101001"
Как это можно преобразовать в byte[]
длины 2?
У меня есть строка из них и нули, которые я хочу преобразовать в массив байтов.Преобразование двоичной строки в байтовый массив
Например, String b = "0110100001101001"
Как это можно преобразовать в byte[]
длины 2?
Разделите его на целое число в базе 2, а затем преобразуйте в массив байтов. На самом деле, поскольку у вас есть 16 бит, пришло время вырваться из редко используемого short
.
short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);
byte[] array = bytes.array();
Что делать, если строка содержит слишком много бит, t быть даже в переменной 'long'? –
Это очень круто! Я этого не знал, спасибо! :) –
Если строка слишком большая, то вы получите 'NumberFormatException'. Я делаю предположения, что это меньше 32 символов для этого небольшого примера. –
Другой простой подход:
String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();
он не может разобрать «1110100001101001» –
См. Http://stackoverflow.com/questions/24158629/biginteger-tobytearray-returns-purposeful-leading-zeros Возможно, у вас есть некоторые проблемы с знаками. – will
Когда я показываю байт [] fspec = new BigInteger («10000000», 2) .toByteArray() ;, он показывает [B @ 3b22cdd0 вместо ожидаемого значения - почему? – Line
Предполагая, что ваш двоичная строка может быть разделена на 8, не получая остальное вы можете использовать следующий метод:
/**
* 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;
}
Не стоит забывать чтобы добавить guava lib к вашим зависимостям.
В Android вы должны добавить в приложение Gradle:
compile group: 'com.google.guava', name: 'guava', version: '19.0'
И добавить это в проекте Gradle:
allprojects {
repositories {
mavenCentral()
}
}
Update 1
This post contains раствор без использования Guava Lib.
Почему длина 2? –
@kocko у него есть 16 бит ... –
Основываясь на строке b, вы хотите, чтобы байт [] был длиной 2 с '104' в позиции 0 и' 105' в позиции 1? –