2014-11-06 215 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);
String binaryStr = new BigInteger(1,decode).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()); 
} 

}

相關問題