带移位的 Base64 实现

Base64 implementation with bit shifting

我尝试实现一个 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

我可以删除号码 2523240 等吗?

May I remove the number 252, 3, 240 etc.?

不,不是全部。在右移和二进制掩码 252、240 和 192 的情况下,它们是多余的,您可以删除它们。但是 3 15 和 63 不是多余的,因为你会传播你不应该传播的位。