base64

Кстати, я тут с удивлением для себя открыл то, что в BOOST есть поддержка BASE64. Надо только чуть-чуть напильником подпилить:

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

template<typename Container, typename CharT>
inline String base64_encode(InputContainerType const & cont)
{
  using namespace boost::archive::iterators;
  typedef base64_from_binary<transform_width<
    typename InputContainerType::const_pointer, 6, 8, boost::uint8_t>
                             > base64_t;
  return String(base64_t(&cont[0]), base64_t(&cont[0] + cont.size()));
}

template<typename Container, typename CharT>
inline Container base64_decode(std::basic_string<CharT> str)
{
  str.append(str.size() % 4, CharT('='));
  typedef boost::archive::iterators::transform_width<
    boost::archive::iterators::binary_from_base64<CharT *>, 8, 6,
    boost::uint8_t
    > binary_t;

  typename std::basic_string<CharT>::size_type pos =
    str.find_last_not_of(CharT('='));
  pos = (pos == str.size() -1 ? str.size() : pos );
  return Container(binary_t(&str[0]), binary_t(&str[0] + pos));
}

2 Comments base64

  1. agorikov

    boost- это такой ужас на крыльях ночи А base64 есть везде и без буста (например на C).

    Reply
  2. Alexander Stavonin

    Зря ты так про BOOST. Очень полезная библиотека, кучу времени экономит.

    Reply

Leave a Reply