我想了解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