c++ base64编解码使用示例


在C++中,Base64编解码通常不是标准库直接支持的功能,但你可以使用一些流行的第三方库,如OpenSSL或Boost,来实现这一功能。然而,为了简洁起见,这里我提供一个基于纯C++的Base64编解码示例,不依赖任何外部库。

**注意**:以下示例代码是为了教学目的而编写的,可能不是最高效或最安全的实现方式,但它展示了Base64编解码的基本原理。

### Base64 编码示例


#include <iostream>
#include <string>
#include <vector>

std::string base64_encode(const std::string& input) {
    static const std::string base64_chars = 
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
             "abcdefghijklmnopqrstuvwxyz"
             "0123456789+/";

    std::string ret;
    int val = 0;
    int valb = -6;

    for (unsigned char c : input) {
        val = (val << 8) + c;
        valb += 8;

        while (valb >= 0) {
            ret.push_back(base64_chars[(val >> valb) & 0x3F]);
            valb -= 6;
        }
    }

    if (valb > -6) {
        ret.push_back('=');
        if (valb > -4) ret.push_back('=');
    }

    return ret;
}

// 使用示例
int main() {
    std::string input = "Hello, World!";
    std::string encoded = base64_encode(input);
    std::cout << "Encoded: " << encoded << std::endl;
    return 0;
}

### Base64 解码示例


#include <iostream>
#include <string>
#include <vector>

std::string base64_decode(std::string const& encoded) {
    static const std::string base64_chars = 
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
             "abcdefghijklmnopqrstuvwxyz"
             "0123456789+/";

    std::string ret;
    int val = 0;
    int valb = -8;

    for (unsigned char c : encoded) {
        if (c == '=')
            break;

        val = (val << 6) | base64_chars.find(c);
        valb += 6;

        if (valb >= 0) {
            ret.push_back(char((val >> valb) & 0xFF));
            valb -= 8;
        }
    }

    return ret;
}

// 使用示例
int main() {
    std::string encoded = "SGVsbG8sIFdvcmxkIQ=="; // 编码后的 "Hello, World!"
    std::string decoded = base64_decode(encoded);
    std::cout << "Decoded: " << decoded << std::endl;
    return 0;
}

这两个示例提供了Base64编解码的基本框架。你可以根据自己的需求修改和扩展这些代码。