下面是我从 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;
}