4

このJavaScriptbase64デコードコードを理解しようとしていますが、 70〜84行目のこのループに戸惑っています。

for (i=0; i<bytes; i+=3) {  
    //get the 3 octects in 4 ascii chars
    enc1 = this._keyStr.indexOf(input.charAt(j++));
    enc2 = this._keyStr.indexOf(input.charAt(j++));
    enc3 = this._keyStr.indexOf(input.charAt(j++));
    enc4 = this._keyStr.indexOf(input.charAt(j++));

    chr1 = (enc1 << 2) | (enc2 >> 4);
    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
    chr3 = ((enc3 & 3) << 6) | enc4;

    uarray[i] = chr1;           
    if (enc3 != 64) uarray[i+1] = chr2;
    if (enc4 != 64) uarray[i+2] = chr3;
}

具体的には、4つのASCII文字に3つのオクテットしかない理由を知りたいです。4オクテットあるべきではありませんか?

4

2 に答える 2

3

3オクテットには24ビットのストレージが必要なためです。Base 64では、1文字あたり6ビット(ASCII文字)があります。4文字*6ビット=24ビットなので、24ビットには4base64文字が必要です。

于 2013-02-21T15:17:28.587 に答える
2

コメントは、Base64アルゴリズム自体に言及しています。バイナリ文字列を7ビットのUS-ASCIIにエンコードしているため、文字列を大きくする必要があります。これは正確な比率です。3つのソースバイトが4つのターゲット文字になります。

于 2013-02-21T15:17:07.373 に答える