0

以下は、Philippe Tenenhaus ( http://www.philten.com/us-xmlhttprequest-image/ ) から入手した base 64 画像エンコード関数です。

非常にややこしいですが、ご理解いただければ幸いです。

ビットごとの & と | を理解していると思います。、および << と >> でバイト位置を移動します。

私はこれらの行で特に混乱しています: ((byte1 & 3) << 4) | (バイト 2 >> 4); ((byte2 & 15) << 2) | (バイト 3 >> 6);

そして、enc2 に byte1 を使用し、enc3 に byte2 を使用している理由。そしてその目的はenc4 = byte3 & 63;

誰かがこの機能を説明できますか?

function base64Encode(inputStr) 
            {
               var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
               var outputStr = "";
               var i = 0;

               while (i < inputStr.length)
               {
                   //all three "& 0xff" added below are there to fix a known bug 
                   //with bytes returned by xhr.responseText
                   var byte1 = inputStr.charCodeAt(i++) & 0xff;
                   var byte2 = inputStr.charCodeAt(i++) & 0xff;
                   var byte3 = inputStr.charCodeAt(i++) & 0xff;

                   var enc1 = byte1 >> 2;
                   var enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);

                   var enc3, enc4;
                   if (isNaN(byte2))
                   {
                       enc3 = enc4 = 64;
                   }
                   else
                   {
                       enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
                       if (isNaN(byte3))
                       {
                           enc4 = 64;
                       }
                       else
                       {
                           enc4 = byte3 & 63;
                       }
                   }

                   outputStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4);
                } 

                return outputStr;
            }
4

1 に答える 1