46 ret.reserve((binary.size() + 2) / 3 * 4);
48 while (ofs + 3 <= binary.size())
50 uint32_t d = (((uint8_t)binary[ofs]) << 16)
51 | (((uint8_t)binary[ofs + 1]) << 8)
52 | (((uint8_t)binary[ofs + 2]));
53 ret.push_back(nib64[(d >> 18) & 63]);
54 ret.push_back(nib64[(d >> 12) & 63]);
55 ret.push_back(nib64[(d >> 6) & 63]);
56 ret.push_back(nib64[(d >> 0) & 63]);
59 if (ofs + 1 == binary.size())
61 uint32_t d = (((uint8_t)binary[ofs]) << 16);
62 ret.push_back(nib64[(d >> 18) & 63]);
63 ret.push_back(nib64[(d >> 12) & 63]);
67 else if (ofs + 2 == binary.size())
69 uint32_t d = (((uint8_t)binary[ofs]) << 16)
70 | (((uint8_t)binary[ofs + 1]) << 8);
71 ret.push_back(nib64[(d >> 18) & 63]);
72 ret.push_back(nib64[(d >> 12) & 63]);
73 ret.push_back(nib64[(d >> 6) & 63]);