Я пытаюсь преобразовать строку бит в символы Unicode в java. Проблема в том, что я получаю только признаки скулов и т. Д.

Строковые биты = "01010011011011100110000101110010"

Кто-нибудь знает, как это сделать?

2
Labba 29 Июн 2016 в 21:35
4
Какой у вас код?
 – 
Yassin Hajaj
29 Июн 2016 в 21:37
Во что нужно преобразовать "01010011011011100110000101110010"?
 – 
一二三
30 Июн 2016 в 02:28

1 ответ

Лучший ответ

Значения <= 32 бит

Используйте Integer.parseInt для анализа двоичной строки, затем преобразуйте ее в массив байтов (используя ByteBuffer) и, наконец, преобразуйте массив байтов в String:

String bits = "01010011011011100110000101110010"
new String(
    ByteBuffer.allocate(4).putInt(
        Integer.parseInt(bits, 2)
    ).array(), 
    StandardCharsets.UTF_8
);

Значения> 32 бит

Для произвольной большой строки bits вы также можете использовать BigInteger:

new String(
    new BigInteger(bits, 2).toByteArray(),
    StandardCharsets.UTF_8
);

Результат

Snar
4
Yassin Hajaj 29 Июн 2016 в 21:59
1
Что, если строка бит была длиннее 64 бит? это не вписалось бы в Лонг
 – 
niceman
29 Июн 2016 в 21:47
Что ж, OP показал нам только один пример, который умещается в целочисленном
 – 
Krzysztof Krasoń
29 Июн 2016 в 21:48
2
OP показал пример, но не сказал явно «битовая строка не может быть длиннее 64», я не думаю, что мы можем это предположить :)
 – 
niceman
29 Июн 2016 в 21:50
1
Да, хорошее замечание. Я добавил пример, который это покрывает, что еще проще :)
 – 
Krzysztof Krasoń
29 Июн 2016 в 21:51
1
По-видимому, это приведет к неправильному поведению, если первый бит равен 1 (то есть, если первый символ имеет кодовую точку U + 0100 или выше), поскольку байтовый массив должен иметь дополнительный байт заполнения, чтобы сделать убедитесь, что бит знака равен 0.
 – 
ruakh
30 Июн 2016 в 01:26