【发布时间】:2020-08-11 16:45:29
【问题描述】:
我尝试实现 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 等吗?
【问题讨论】:
-
“和其他”是什么意思?还有什么?
-
我会先尝试让这段代码可读。例如用十六进制替换十进制常量。
-
@David Schwartz,我的意思是
252、3、240、15、192和63。 -
@lostsky25 如果您认为可以删除
((char_array_3[0]&3)<<4)中的3,那么您就是不了解代码。 -
@Slava,在第一个实现中,我有十六进制文字。我刚改成十进制文字。
标签: c++ base64 implementation