14 const size_t N = input.size() / 3;
15 const size_t remainder = input.size() % 3;
18 result.resize(4 * (N +
static_cast<size_t>(remainder != 0)));
20 for (
size_t i = 0; i < N; i++)
22 const uint32_t word = (uint32_t(uint8_t(input[3 * i + 0])) << 16) |
23 (uint32_t(uint8_t(input[3 * i + 1])) << 8) |
24 (uint32_t(uint8_t(input[3 * i + 2])) );
25 result[4 * i + 0] = base64_codes[(word >> 18) ];
26 result[4 * i + 1] = base64_codes[(word >> 12) & 0x3f];
27 result[4 * i + 2] = base64_codes[(word >> 6) & 0x3f];
28 result[4 * i + 3] = base64_codes[(word ) & 0x3f];
33 const int32_t word = (uint8_t(input[3 * N + 0]) << 10) |
34 (uint8_t(input[3 * N + 1]) << 2);
35 result[4 * N + 0] = base64_codes[(word >> 12) ];
36 result[4 * N + 1] = base64_codes[(word >> 6) & 0x3f];
37 result[4 * N + 2] = base64_codes[(word ) & 0x3f];
38 result[4 * N + 3] =
'=';
40 else if (remainder == 1)
42 const int32_t word = (uint8_t(input[3 * N + 0]) << 4);
43 result[4 * N + 0] = base64_codes[(word >> 6) ];
44 result[4 * N + 1] = base64_codes[(word ) & 0x3f];
45 result[4 * N + 2] =
'=';
46 result[4 * N + 3] =
'=';