.. _program_listing_file_components_Util_src_Base64.cpp: Program Listing for File Base64.cpp =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``components/Util/src/Base64.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "Base64.h" namespace util { static const char BASE64_ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; static void a3_to_a4(std::uint8_t* a4, std::uint8_t* a3) { a4[0] = (a3[0] & 0xfc) >> 2; a4[1] = ((a3[0] & 0x03) << 4) + ((a3[1] & 0xf0) >> 4); a4[2] = ((a3[1] & 0x0f) << 2) + ((a3[2] & 0xc0) >> 6); a4[3] = (a3[2] & 0x3f); } bool base64Encode(const std::string& in, std::string* out) { int i = 0; int j = 0; size_t enc_len = 0; std::uint8_t a3[3] = {0}; std::uint8_t a4[4] = {0}; out->resize(base64EncodedLength(in)); int input_len = in.size(); std::string::const_iterator input = in.begin(); while (input_len--) { a3[i++] = *(input++); if (i == 3) { a3_to_a4(a4, a3); for (i = 0; i < 4; i++) { (*out)[enc_len++] = BASE64_ALPHABET[a4[i]]; } i = 0; } } if (i) { for (j = i; j < 3; j++) { a3[j] = '\0'; } a3_to_a4(a4, a3); for (j = 0; j < i + 1; j++) { (*out)[enc_len++] = BASE64_ALPHABET[a4[j]]; } while ((i++ < 3)) { (*out)[enc_len++] = '='; } } return (enc_len == out->size()); } } // namespace util