さよなら備忘録

「なにをいまさら」と言われそうな些細なことのメモがわり

Boostライブラリでbase64へのコンバートとデコード

エンコード結果を標準出力にコピーする。

#include <iostream>
#include <sstream>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>

using namespace std;
using namespace boost::archive::iterators;
using InputItr  = istreambuf_iterator<char>;
using OutputItr = ostream_iterator<char>;
using EncodeItr = base64_from_binary<transform_width<InputItr, 6, 8>>;
using DecodeItr = transform_width<binary_from_base64<InputItr>, 8, 6, char>;

template <typename InputStream, typename OutputStream>
inline OutputStream& encode(InputStream& is, OutputStream& os) {
  copy(EncodeItr(InputItr(is)), EncodeItr(InputItr()), OutputItr(os));
  return os;
}

template <typename InputStream, typename OutputStream>
inline OutputStream& decode(InputStream& is, OutputStream& os) {
  copy(DecodeItr(InputItr(is)), DecodeItr(InputItr()), OutputItr(os));
  return os;
}

int main() {
  stringstream ss;
  ss << "abcdefg";
  encode(ss, cout); // YWJjZGVmZw
}