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」に相当するものではないでしょうか。私の配列は 3 つの 0 で始まるべきではありませんか? これをバイナリに (0 と 1 で) 変換するにはどうすればよいですか?

4

1 に答える 1

4

Base 64 では、各文字は 6 ビットの情報を表します。4 文字のシーケンスは、24 ビットの情報 (つまり 3 バイト) を表します。

次に、シーケンスAAADは を表し{0,0,3}ます。

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

最後がパディング文字であるAAB=最後のシーケンスは、 16 ビット値を表し (実際には 18 ビットありますが、最後の 2 ビットは無視されます)、 と同等です。={0, 0}

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

最後のシーケンスがであった場合、それは に相当する8 ビットAB==を表します。{0}

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