我想了解this JavaScript base64 decoding code但我這個循環疑惑在lines 70-84:爲什麼這個代碼有3個八位字節超過4個字符?
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;
}
具體來說,我想知道爲什麼只有3個在4個ASCII字符字節。不應該有4個八位字節?
是不是ASCII 7位? – cdmckay 2013-07-27 19:00:44
@cdmckay:這是因爲所有現代系統都使用8位字節,因此它非常不重要......最高位被浪費或用於指示額外信息。你可以將8個字符打包成7個字節,但是內存很便宜,相比之下,編碼/解碼會相當昂貴。 – Goz 2013-07-27 19:19:26
沒錯,但你說你在答案中每個字符使用6位。我只是想知道第七位去了哪裏。 – cdmckay 2013-07-28 20:33:11