2014-11-06 3 views
0

У меня есть следующая 3-байтовая кодированная строка Base64.Преобразование Base64 в двоичную строку в Java

String base64_str = "MDQw"; 
    System.out.println("base64:" + base64_str); 
    String hex = DatatypeConverter.printHexBinary(DatatypeConverter.parseBase64Binary(base64_str)); 

    for (int i = 0; i < hex.length(); i+=6) { 
     String bytes = hex.substring(i, i+6); 

     System.out.println("hex: " + bytes); 

     StringBuilder binary = new StringBuilder(); 

     int byte3_int = Integer.parseInt(bytes.substring(4, 6), 16); 
     String byte3_str = Integer.toBinaryString(byte3_int); 
     byte3_int = Integer.valueOf(byte3_str); 
     binary.append(String.format("%08d", byte3_int)); 

     int byte2_int = Integer.parseInt(bytes.substring(2, 4), 16); 
     String byte2_str = Integer.toBinaryString(byte2_int); 
     byte2_int = Integer.valueOf(byte2_str); 
     binary.append(String.format("%08d", byte2_int)); 

     int byte1_int = Integer.parseInt(bytes.substring(0, 2), 16); 
     String byte1_str = Integer.toBinaryString(byte1_int); 
     byte1_int = Integer.valueOf(byte1_str); 
     binary.append(String.format("%08d", byte1_int)); 

     System.out.println("binary: " + binary); 
    } 
} 

Мой Выход:

base64:MDQw 
hex: 303430 
binary: 001100000011010000110000 

выше выход правильно, но есть более эффективный способ на преобразовании строки base64 в двоичную строку?

Заранее спасибо.

ответ

1

Вы можете использовать BigInteger (импорт java.math.BigInteger;), чтобы преобразовать строку base64 в двоичную строку.

byte [] decode = Base64.decodeBase64 (base64_str);
Строка binaryStr = новый BigInteger (1, декодирование) .toString (2);

3

Вот небольшой код для выполнения вашей операции. Единственным недостатком является использование замены для плюсование 0.

import javax.xml.bind.DatatypeConverter; 
import java.io.UnsupportedEncodingException; 

public class main { 

public static void main(String [] args) throws UnsupportedEncodingException { 
    String base64_str = "MDQw"; 
    byte[] decode = DatatypeConverter.parseBase64Binary(base64_str); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < decode.length; i++){ 
     String temp = Integer.toBinaryString(decode[i]); 
     sb.append(String.format("%8s", temp).replace(" ", "0")); 
    } 

    System.out.println(sb.toString()); 
} 

}

Смежные вопросы