branch: devel-tetsuo-xml-binary commit 302d69d37a03e47fe34acb620e9c0d17704d03c1 Author: Tetsuo Koyama <tkoyama...@gmail.com> AuthorDate: Tue Jun 16 12:58:31 2020 +0900
Add base64_encode --- src/getfem_export.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/getfem_export.cc b/src/getfem_export.cc index 63abc0c..108a206 100644 --- a/src/getfem_export.cc +++ b/src/getfem_export.cc @@ -46,6 +46,36 @@ namespace getfem return true; } + /* Base64 encoding (https://en.wikipedia.org/wiki/Base64) */ + std::string base64_encode(const std::vector<unsigned char>& src) + { + const std::string table("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); + std::string dst; + for (std::size_t i = 0; i < src.size(); ++i) { + switch (i % 3) { + case 0: + dst.push_back(table[(src[i] & 0xFC) >> 2]); + if (i + 1 == src.size()) { + dst.push_back(table[(src[i] & 0x03) << 4]); + dst.push_back('='); + dst.push_back('='); + } + break; + case 1: + dst.push_back(table[((src[i - 1] & 0x03) << 4) | ((src[i + 0] & 0xF0) >> 4)]); + if (i + 1 == src.size()) { + dst.push_back(table[(src[i] & 0x0F) << 2]); + dst.push_back('='); + } + break; + case 2: + dst.push_back(table[((src[i - 1] & 0x0F) << 2) | ((src[i + 0] & 0xC0) >> 6)]); + dst.push_back(table[src[i] & 0x3F]); + break; + } + } + return dst; + } /* ------------------------------------------------------------- * VTK export