How to encode and decode a string to base64 in C++

1 Answer

0 votes
#include <iostream>
#include <string>
#include <vector>
#include <cstdint>

// Basic Base64 table
static const std::string base64_chars =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz"
    "0123456789+/";

// Base64 encoding
std::string base64Encode(const std::string& input) {
    std::string output;
    int val = 0, valb = -6;
    
    for (uint8_t c : input) {
        val = (val << 8) + c;
        valb += 8;
        while (valb >= 0) {
            output.push_back(base64_chars[(val >> valb) & 0x3F]);
            valb -= 6;
        }
    }
    if (valb > -6)
        output.push_back(base64_chars[((val << 8) >> (valb + 8)) & 0x3F]);
    while (output.size() % 4)
        output.push_back('=');
    
    return output;
}

// Base64 decoding
std::string base64Decode(const std::string& input) {
    std::vector<int> T(256, -1);
    for (int i = 0; i < 64; i++) T[base64_chars[i]] = i;

    std::string output;
    int val = 0, valb = -8;
    for (uint8_t c : input) {
        if (T[c] == -1) break;
        val = (val << 6) + T[c];
        valb += 6;
        if (valb >= 0) {
            output.push_back(char((val >> valb) & 0xFF));
            valb -= 8;
        }
    }
    
    return output;
}

int main() {
    std::string encoded = base64Encode("c++ programming");
    std::cout << encoded << std::endl;

    std::string decoded = base64Decode(encoded);
    std::cout << decoded << std::endl;
}


 
/*
run:
 
YysrIHByb2dyYW1taW5n
c++ programming

*/


 



answered Jul 10, 2025 by avibootz
...