#pragma once #include /// Namespace for character encoding functions and classes namespace Encodings{ /// Holds base64 decoding and encoding functions. class Base64{ private: static const std::string chars; static inline bool is_base64(unsigned char c); public: static std::string encode(std::string const input); static std::string decode(std::string const &encoded_string); }; /// urlencoding and urldecoding functions class URL{ public: /// urldecodes std::string data, parsing out both %-encoded characters and +-encoded spaces. static std::string decode(const std::string &in); /// urlencodes std::string data, leaving only the characters A-Za-z0-9~!&()' alone. static std::string encode(const std::string &c, const std::string &ign = ""); }; /// Hexadecimal-related functions class Hex{ public: /// Decodes a single hexadecimal character to integer, case-insensitive. static inline int ord(char c){return ((c & 15) + (((c & 64) >> 6) | ((c & 64) >> 3)));} /// Encodes a single character as two hex digits in string form. static std::string chr(char dec); /// Decodes a hex-encoded std::string to a raw binary std::string. static std::string decode(const std::string &in); /// Encodes a raw binary std::string to its hex-encoded form static std::string encode(const std::string &in); }; }// namespace Encodings