1 #ifndef LIBFILEZILLA_ENCODE_HEADER
2 #define LIBFILEZILLA_ENCODE_HEADER
23 template<
typename Char>
26 if (c >=
'a' && c <=
'f') {
29 if (c >=
'A' && c <=
'F') {
32 else if (c >=
'0' && c <=
'9') {
39 template<
typename OutString,
typename String>
40 OutString hex_decode_impl(String
const& in)
43 if (!(in.size() % 2)) {
44 ret.reserve(in.size() / 2);
45 for (
size_t i = 0; i < in.size(); i += 2) {
48 if (high == -1 || low == -1) {
51 ret.push_back(
static_cast<typename OutString::value_type
>((high << 4) + low));
58 template<
typename OutString = std::vector<u
int8_t>>
59 OutString hex_decode(std::string_view
const& in)
61 return hex_decode_impl<OutString>(in);
64 template<
typename OutString = std::vector<u
int8_t>>
65 OutString hex_decode(std::wstring_view
const& in)
67 return hex_decode_impl<OutString>(in);
76 template<
typename Char =
char,
bool Lowercase = true>
80 return static_cast<Char
>((Lowercase ?
'a' :
'A') + d - 10);
83 return static_cast<Char
>(
'0' + d);
87 template<
typename String,
typename InString,
bool Lowercase = true>
88 String hex_encode(InString
const& data)
90 static_assert(
sizeof(
typename InString::value_type) == 1,
"Input must be a container of 8 bit values");
92 ret.reserve(data.size() * 2);
93 for (
auto const& c : data) {
94 ret.push_back(int_to_hex_char<typename String::value_type, Lowercase>(
static_cast<unsigned char>(c) >> 4));
95 ret.push_back(int_to_hex_char<typename String::value_type, Lowercase>(
static_cast<unsigned char>(c) & 0xf));
113 std::string FZ_PUBLIC_SYMBOL
base64_encode(std::string_view
const& in,
base64_type type = base64_type::standard,
bool pad =
true);
114 std::string FZ_PUBLIC_SYMBOL
base64_encode(std::vector<uint8_t>
const& in,
base64_type type = base64_type::standard,
bool pad =
true);
121 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base64_decode(std::string_view
const& in);
122 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base64_decode(std::wstring_view
const& in);
123 std::string FZ_PUBLIC_SYMBOL base64_decode_s(std::string_view
const& in);
124 std::string FZ_PUBLIC_SYMBOL base64_decode_s(std::wstring_view
const& in);
140 std::string FZ_PUBLIC_SYMBOL
base32_encode(std::string_view
const& in,
base32_type type = base32_type::standard,
bool pad =
true);
141 std::string FZ_PUBLIC_SYMBOL
base32_encode(std::vector<uint8_t>
const& in,
base32_type type = base32_type::standard,
bool pad =
true);
148 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base32_decode(std::string_view
const& in,
base32_type type = base32_type::standard);
149 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base32_decode(std::wstring_view
const& in,
base32_type type = base32_type::standard);
150 std::string FZ_PUBLIC_SYMBOL base32_decode_s(std::string_view
const& in,
base32_type type = base32_type::standard);
151 std::string FZ_PUBLIC_SYMBOL base32_decode_s(std::wstring_view
const& in,
base32_type type = base32_type::standard);
161 std::string FZ_PUBLIC_SYMBOL
percent_encode(std::string_view
const& s,
bool keep_slashes =
false);
162 std::string FZ_PUBLIC_SYMBOL
percent_encode(std::wstring_view
const& s,
bool keep_slashes =
false);
169 std::wstring FZ_PUBLIC_SYMBOL
percent_encode_w(std::wstring_view
const& s,
bool keep_slashes =
false);
176 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
percent_decode(std::string_view
const& s,
bool allow_embedded_null =
false);
177 std::vector<uint8_t> FZ_PUBLIC_SYMBOL
percent_decode(std::wstring_view
const& s,
bool allow_embedded_null =
false);
178 std::string FZ_PUBLIC_SYMBOL percent_decode_s(std::string_view
const& s,
bool allow_embedded_null =
false);
179 std::string FZ_PUBLIC_SYMBOL percent_decode_s(std::wstring_view
const& s,
bool allow_embedded_null =
false);