Base64は最後にゼロを含むバイナリデータをどのように処理しますか
質問
仕様を理解したように、Base64エンコーダー
a)ソースバイナリを取得し、24バイトの倍数になるようにゼロを埋め込みます。
b)次に、一度に6ビットずつ、64文字のターゲットセット(A..Z、a..z、0..9、+、-)にトランスコードします。最後の2バイト(16ビット)にゼロが埋め込まれていることが検出された場合、最後の2文字は「==」としてトランスコードされます。最後の1バイト(8ビット)にゼロが埋め込まれていることがわかると、最後の文字は「=」としてトランスコードされます。
ステップ(b)で、最後のバイトがパディングされているためゼロであるのに対し、有効なバイナリソースデータの一部であるためゼロであることがどのようにわかりますか?
パート(b)を担当するサブシステムは、パート(a)で何が起こったのかを知る必要があるのですか
解決
エンコーダー(デコーダーではなく)は、入力データの長さを認識し、何も出力しないかどうかを判断できます" ="または" =="最後に。あなたの質問は、あなたが言及した2つの段階の間につながりがないことを前提としていますが、私が見た実装ではそうではありません。
入力ストリームから6ビットグループを1つずつ抽出し、毎回byteCountをインクリメントするルーチンがあるため、書き込みに必要な実装では、最初の段階はまったく行われませんでした。最後に、式" byteCount%3
"出力ストリームに追加する文字列を決定するために使用されました。
所属していません StackOverflow