By
Liang Zhu
更新日期:
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