栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 使用Poco库进行base64编解码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 使用Poco库进行base64编解码

C++ 使用Poco库进行base64编解码

flyfish

头文件

#include 
#include 
#include 
#include 

编码

std::string to_base64 ( const std::string &source)
{
    std::istringstream in(source);
    std::ostringstream out;
    Poco::Base64Encoder b64_e(out);

    std::copy(std::istreambuf_iterator< char >(in),
              std::istreambuf_iterator< char >(),
              std::ostreambuf_iterator< char >(b64_e));
    b64_e.close();

    return out.str();
}

解码

std::string from_base64 ( const std::string &source)
{
    std::istringstream in(source);
    std::ostringstream out;
    Poco::Base64Decoder b64_d(in);

    std::copy(std::istreambuf_iterator< char >(b64_d),
              std::istreambuf_iterator< char >(),
              std::ostreambuf_iterator< char >(out));

    return out.str();
}

调用

int main()
{

    std::string source="a";
    std::string target=to_base64(source);
    std::cout << target << std::endl;//YQ==

    std::string r=from_base64(target);
    std::cout << r << std::endl;//a
}

不调用库的base64编码方式

std::string base64_encode(const unsigned char *data, int size)
{
    //data 原始数据,size 原始数据的大小
    //编码表
    const char e_t[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //encode table
    //返回值
    std::string r;
    unsigned char t[4] = {0};//temp
    for (int i = 0; i < (int)(size / 3); i++)
    {
        t[1] = *data++;
        t[2] = *data++;
        t[3] = *data++;
        r += e_t[t[1] >> 2];
        r += e_t[((t[1] << 4) | (t[2] >> 4)) & 0x3F];
        r += e_t[((t[2] << 2) | (t[3] >> 6)) & 0x3F];
        r += e_t[t[3] & 0x3F];

    }
    //对剩余数据进行编码
    int Mod = size % 3;
    if (Mod == 1)
    {
        t[1] = *data++;
        r += e_t[(t[1] & 0xFC) >> 2];
        r += e_t[((t[1] & 0x03) << 4)];
        r += "==";
    }
    else if (Mod == 2)
    {
        t[1] = *data++;
        t[2] = *data++;
        r += e_t[(t[1] & 0xFC) >> 2];
        r += e_t[((t[1] & 0x03) << 4) | ((t[2] & 0xF0) >> 4)];
        r += e_t[((t[2] & 0x0F) << 2)];
        r += "=";
    }

    return r;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034719.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号