3

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

我试图将 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 表示)?

4

1 回答 1

4

在 base 64 中,每个字符代表 6 位信息。一个四字符序列代表 24 位信息(即 3 个字节)。

那么,序列AAAD表示{0,0,3}

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

最后一个序列AAB=,其中final=是一个填充字符,表示一个16位的值(实际上有18位,但最后两位被忽略了),相当于{0, 0}

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

如果最后一个序列是AB==,它将表示一个8 位值,相当于{0}

   AB== -> 000000 000001 -> 00000000 (ignored: 0001)
于 2013-04-04T04:51:46.993 回答