文章目录
  1. 1. Boost: Base64编解码实现
    1. 1.1. Base64编码
    2. 1.2. Base64解码

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。

Boost: Base64编解码实现

Base64编码

1
2
3
4
5
6
7
8
9
10
11
inline bool Base64Encode(const std::string& input, std::string* output) {
typedef boost::archive::iterators::base64_from_binary<boost::archive::iterators::transform_width<std::string::const_iterator, 6, 8> > Base64EncodeIterator;
std::stringstream result;
std::copy(Base64EncodeIterator(input.begin()) , Base64EncodeIterator(input.end()), std::ostream_iterator<char>(result));
size_t equal_count = (3 - input.length() % 3) % 3;
for (size_t i = 0; i < equal_count; i++) {
result.put('=');
}
*output = result.str();
return output->empty() == false;
}

More info: Boost

Base64解码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
inline bool Base64Decode(const std::string& input, std::string* output) { 
typedef boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<std::string::const_iterator>, 8, 6> Base64DecodeIterator;
std::stringstream result;
bool bPaded = false;
int iLength = input.size();
if(iLength && input[iLength-1] == '=')
{
bPaded = true;
--iLength;
if(iLength && input[iLength-1] == '=')
{
--iLength;
}
}
if(iLength == 0)
{
return false;
}

if(bPaded)
{
--iLength;
}

try {
std::copy(Base64DecodeIterator(input.begin()) , Base64DecodeIterator(input.begin()+iLength), std::ostream_iterator<char>(result));
} catch(...) {
return false;
}

*output = result.str();
return output->empty() == false;
}

More info: Boost

文章目录
  1. 1. Boost: Base64编解码实现
    1. 1.1. Base64编码
    2. 1.2. Base64解码