如何解决带位移的Base64实现
我尝试实现base64编码器。我有这个算法:
while (len--)
{
char_array_3[i++] = *(data++);
if (i == 3)
{
char_array_4[0] = (char_array_3[0] & 252) >> 2; //This line.
char_array_4[1] = ((char_array_3[0] & 3) << 4) + ((char_array_3[1] & 240) >> 4);
char_array_4[2] = ((char_array_3[1] & 15) << 2) + ((char_array_3[2] & 192) >> 6);
char_array_4[3] = char_array_3[2] & 63;
for (i = 0; i < 4; i++) {
ret += base64_chars[char_array_4[i]];
}
i = 0;
}
}
为什么我应该做char_array_3[0] & 252
?我只能使用>> 2
。由于...
例如,如果我输入此字符H
:
H -> 01001000
我可以做位移:
01001000 >> 2 = 000100100
或使用and (&)
...
252 -> 11111100
01001000 & 11111100 = 01001000
我将使用相同的数字...
然后需要执行以下操作:
01001000 >> 2 = 000100100
我可以删除数字252
,3
,240
等吗?
解决方法
我可以删除252、3、240等数字吗?
不,不是全部。对于右移和二进制掩码252、240和192,它们是多余的,您可以将其删除。但是3 15和63并不是多余的,因为您会传播不应该传播的位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。