下面是我從Philippe Tenenhaus(http://www.philten.com/us-xmlhttprequest-image/)得到的基本64圖像編碼功能。javascript中的base 64編碼
這讓我很困惑,但我很想理解。
我想我明白了按位&和| ,並通過< <和>>在字節位置移動。
我特別困惑那些線: ((byte1 & 3)< < 4)| (byte2 >> 4); ((byte 2 & 15)< < 2)| (byte3 >> 6);
爲什麼它仍然使用byte1作爲enc2,而byte2作爲enc3。 而enc4 = byte3 & 63;
的目的...
有人可以解釋這個功能。
function base64Encode(inputStr)
{
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=";
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;
}
維基百科鏈接中的第一個例子是一個很好的例子。 – Tyler
太棒了!我幾乎瞭解所有。爲什麼'(byte1&3)<< 4'和'(byte2&15)<< 2'?我不明白爲什麼4和2. – trogne
行我知道!(byte1&3)成爲第一個2位,然後更強大,所以x2x2x2x2。但是:下面添加了'all three'&0xff'來解決一個已知的錯誤':錯誤是什麼?請告訴我,如果我是正確的:該函數只讀取yeach字節的最後八位字節(0xFF = 00000000000000000000000011111111)。當閱讀更多時,有一個錯誤。 – trogne