1

仕様を理解しているように、Base64エンコーダー

a) ソース バイナリを取得し、長さが 24 バイトの倍数になるようにゼロで埋めます。

b) 次に、一度に 6 ビットずつ、64 文字のターゲット セット (A..Z、a..z、0..9、+、-) にトランスコードします。最後の 2 バイト (16 ビット) がゼロで埋められていることが判明した場合、最後の 2 文字は「==」としてトランスコードされます。最後の 1 バイト (8 ビット) がゼロで埋められていることが判明した場合、最後の文字は「=」としてトランスコードされます。

私の質問は、ステップ (b) で、最後のバイトがパディングされているためにゼロであることと、有効なバイナリ ソース データの一部であるためゼロであることをどのように認識するのでしょうか?

パート (b) を担当するサブシステムは、パート (a) で何が起こったかを知る必要があるということですか?

4

1 に答える 1

3

エンコーダー (デコーダーとは対照的に) は入力データの長さを認識し、最後に何も出力しないか、「=」か「==」かを判断できます。あなたの質問は、あなたが言及した2つの段階の間につながりがないことを前提としていますが、私が見た実装ではそうではありません.

入力ストリームから 6 ビット グループを一度に 1 つずつ抽出し、毎回 byteCount をインクリメントするルーチンがあったため、私が書かなければならなかった実装は、最初の段階をまったく実行しませんでし。最後に、式 " byteCount%3" を使用して、出力ストリームに追加する文字列を決定しました。

于 2008-10-29T12:53:52.930 に答える