为什么这个代码有超过4个字符的3个八位字节
Why does this code have 3 octets over 4 characters?
我试图理解这个JavaScript base64解码代码,但我对第70-84行的循环感到困惑:
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;
}
具体来说,我想知道为什么在4个ascii字符中只有3个八位字节。不应该有4个八位字节吗?
因为3个八位字节需要24位存储空间。在64进制中,每个字符有6位(ascii字符)。4个字符*6位=24位,因此24位需要4个base64字符。
注释指的是Base64算法本身。由于您将二进制字符串编码为7位US-ASCII,因此字符串必须增长,这就是确切的比例:3个源字节变成4个目标字符。
相关文章:
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用Google Maps API向标记添加多个字符
- 单元格的工具提示或标题不显示超过2000个字符
- 如何显示字符串中最多 200 个字符
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 将字符串分组为n个字符的块,并应用替换
- 如何在ajax中检查密码是否小于8个字符
- 用于在Javascript中删除多个空格的特殊字符
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 如何替换javascript字符串中的前三个连字符
- 如何使用正则表达式限制字符串的第一个字符
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 使用javascript替换字符串中除第一个和最后一个之外的所有字符
- 如何在输入文本字段中输入10个字符时自动提交表单
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- 如何从日期中分割x个字符
- 如果两个跨度有数据,则添加字符
- 在跨度中每3个字符添加一个空格