簡體   English   中英

在 Java 中將 Base64 轉換為二進制字符串

[英]Convert Base64 to Binary String in Java

我有以下 3 字節編碼的 Base64 字符串。

    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 字符串轉換為二進制字符串?

提前致謝。

您可以使用BigInteger (import java.math.BigInteger;) 將 base64 字符串轉換為二進制字符串。

byte[] decode = Base64.decodeBase64(base64_str);
String binaryStr = new BigInteger(1, decode).toString(2);

這是一個小代碼來執行您的操作。 唯一的缺陷是使用替換來填充 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());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM