【问题标题】:Base64 to Binary Conversion using Java使用 Java 将 Base64 转换为二进制
【发布时间】:2013-04-04 04:32:19
【问题描述】:

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

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

【问题讨论】:

标签: java binary base64


【解决方案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 中将字节输出转换为二进制?
  • 如果您想要字节值的字符串表示,请执行new BigInteger(1, decoded).toString(2)
  • 谢谢哈维尔!!我查阅了 BigInteger 的文档并理解了这行代码。这个答案很有帮助!
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 2017-08-29
  • 2017-01-26
  • 2012-09-01
相关资源
最近更新 更多