java - 使用 Java 将 Base64 转换为二进制

标签 java binary base64

我已经查看了针对我发布的问题找到的回复,但我无法弄清楚一些事情。如果有人能就此稍微说明一下,我将不胜感激:

我试图将 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, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0]

输出是否正确?当我查找有关 base64 转换的一些文档时,我注意到“A”的等价物是 0。数组的最后一个槽中如何有一个零?它不会有相当于“B”的东西吗?那么我的数组不应该以三个 0 开头吗?我如何将其转换为二进制文件(以 0 和 1 表示)?

最佳答案

在 base 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)

关于java - 使用 Java 将 Base64 转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802565/

相关文章:

C++ Windows JPEG 到字节流

javascript - 如何使用 javascript 中的 http.post 将图像发送到服务器并在 mongodb 中存储 base64

java - 动态识别base64编码的文件类型

java - 持久化 HashMap 最有效的方法是什么?

Java 公历输出错误的日期

Java:何时使用 String[] args 而不是 String args[]

iphone - 如何使用 base64 解码数据并在 objective-c 中另存为文件对象?

java - 确定算法的时间复杂度

PHP将二进制字符串转换为二进制的有效方法

javascript - 如何对数字进行零填充?