2013-04-04 3 views
3

Я уже рассмотрел ответы, которые я нашел для вопроса, который я опубликовал, но я не смог что-то выяснить. Я был бы очень признателен, если бы кто-то мог подумать об этом немного:Base64 to Binary Conversion с использованием Java

Я пытался преобразовать строку base64 в двоичную. Я натолкнулся на следующий код, и у меня есть строка base64, хранящаяся в массиве байтов. Как преобразовать массив байтов в двоичный файл. код я нашел:

import org.apache.commons.codec.binary.Base64; 

import java.util.Arrays; 

public class Base64Decode { 
    public static void main(String[] args) { 
      String hello = "AAADccwwCBwOAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAB=="; 

      byte[] decoded = Base64.decodeBase64(hello.getBytes()); 

      System.out.println(Arrays.toString(decoded)); 

      } 
} 

Выход:

[0, 0, 3, 113, -52, 48, 8, 28, 14, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

Действительно ли выход? Когда я просмотрел документацию для преобразования base64, я заметил, что эквивалент «A» равен 0. Как у массива есть нуль в последнем слоте? Не будет ли он иметь эквивалент «B». Должен ли мой массив не начинаться с трех 0? Как я могу преобразовать это в двоичный (в терминах 0s 'и 1s')?

+0

Вы видели это .. http://stackoverflow.com/questions/12317518/how-to-convert-base64-encode-binary-string-to-binary-in-java –

ответ

4

В базе 64 каждый символ представляет 6 бит информации. Четырехсимвольная последовательность представляет собой 24 бита информации (т. Е. 3 байта).

Затем последовательность AAAD представляет {0,0,3}.

AAAD -> 000000 000000 000000 000011 -> 00000000 00000000 00000011 

Последняя последовательность AAB=, где конечный = является символом заполнения, представляет собой значения 16-битный (есть на самом деле 18 бит, но последние два бита игнорируется), что эквивалентно {0, 0}.

AAB= -> 000000 000000 000001 -> 00000000 00000000 (ignored: 01) 

Если бы последняя последовательность была AB==, он бы представлял собой значение 8-битный, что эквивалентно {0}.

AB== -> 000000 000001 -> 00000000 (ignored: 0001) 
+0

Привет Хавьер, спасибо для объяснения. Это помогает! Как преобразовать байтовый вывод в двоичный файл в Java? –

+0

Если вы хотите получить строковое представление значений байтов, выполните 'new BigInteger (1, decoded) .toString (2)' – Javier

+0

Спасибо, Хавьер! Я просмотрел документацию для BigInteger и понял строку кода. Этот ответ был очень полезен! –