7 static constexpr char base64_decoding[256] =
9 0, 0, 0, 0, 0, 0, 0, 0,
10 0, 0, 0, 0, 0, 0, 0, 0,
12 0, 0, 0, 0, 0, 0, 0, 0,
13 0, 0, 0, 0, 0, 0, 0, 0,
15 0, 0, 0, 0, 0, 0, 0, 0,
16 0, 0, 0, 62, 0, 0, 0, 63,
18 52, 53, 54, 55, 56, 57, 58, 59,
19 60, 61, 0, 0, 0, 0, 0, 0,
21 0, 0, 1, 2, 3, 4, 5, 6,
22 7, 8, 9, 10, 11, 12, 13, 14,
24 15, 16, 17, 18, 19, 20, 21, 22,
25 23, 24, 25, 0, 0, 0, 0, 0,
27 0, 26, 27, 28, 29, 30, 31, 32,
28 33, 34, 35, 36, 37, 38, 39, 40,
30 41, 42, 43, 44, 45, 46, 47, 48,
31 49, 50, 51, 0, 0, 0, 0, 0,
33 0, 0, 0, 0, 0, 0, 0, 0,
34 0, 0, 0, 0, 0, 0, 0, 0,
36 0, 0, 0, 0, 0, 0, 0, 0,
37 0, 0, 0, 0, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 0,
40 0, 0, 0, 0, 0, 0, 0, 0,
42 0, 0, 0, 0, 0, 0, 0, 0,
43 0, 0, 0, 0, 0, 0, 0, 0,
45 0, 0, 0, 0, 0, 0, 0, 0,
46 0, 0, 0, 0, 0, 0, 0, 0,
48 0, 0, 0, 0, 0, 0, 0, 0,
49 0, 0, 0, 0, 0, 0, 0, 0,
51 0, 0, 0, 0, 0, 0, 0, 0,
52 0, 0, 0, 0, 0, 0, 0, 0,
54 0, 0, 0, 0, 0, 0, 0, 0,
55 0, 0, 0, 0, 0, 0, 0, 0,
64 size_t N = input.size() / 4;
69 if (input[input.size() - 1] ==
'=')
72 if (input[input.size() - 2] ==
'=')
79 result.resize(3 * N + remainder);
81 for (
size_t i = 0; i < N; i++)
84 (uint32_t(base64_decoding[uint8_t(input[4 * i + 0])]) << 18) |
85 (uint32_t(base64_decoding[uint8_t(input[4 * i + 1])]) << 12) |
86 (uint32_t(base64_decoding[uint8_t(input[4 * i + 2])]) << 6) |
87 (uint32_t(base64_decoding[uint8_t(input[4 * i + 3])]) );
89 result[3 * i + 0] = char(word >> 16);
90 result[3 * i + 1] = char(word >> 8);
91 result[3 * i + 2] = char(word );
97 (uint32_t(base64_decoding[uint8_t(input[4 * N + 0])]) << 12) |
98 (uint32_t(base64_decoding[uint8_t(input[4 * N + 1])]) << 6) |
99 (uint32_t(base64_decoding[uint8_t(input[4 * N + 2])]) );
101 result[3 * N + 0] = char(word >> 10);
102 result[3 * N + 1] = char(word >> 2);
104 else if (remainder == 1)
106 const uint32_t word =
107 (uint32_t(base64_decoding[uint8_t(input[4 * N + 0])]) << 6) |
108 (uint32_t(base64_decoding[uint8_t(input[4 * N + 1])]) );
110 result[3 * N + 0] = char(word >> 4);
std::string base64_decode(const std::string &input)