Add toBase64String()

This commit is contained in:
2022-06-30 06:56:08 +02:00
parent 093cf3807e
commit b8e9f6f482
2 changed files with 35 additions and 0 deletions

View File

@@ -78,6 +78,35 @@ tl::expected<std::basic_string<unsigned char>, std::string> fromHexString(std::s
return result;
}
std::string toBase64String(std::basic_string_view<unsigned char> buf)
{
constexpr std::string_view base64_chars{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
std::string out;
int val = 0;
int valb = -6;
for (unsigned char c : buf)
{
val = (val << 8) + c;
valb += 8;
while (valb >= 0)
{
out.push_back(base64_chars[(val>>valb)&0x3F]);
valb -= 6;
}
}
if (valb>-6)
out.push_back(base64_chars[((val << 8) >> (valb + 8)) & 0x3F]);
while (out.size() % 4)
out.push_back('=');
return out;
}
bool stringEqualsIgnoreCase(std::string_view a, std::string_view b)
{
if (a.size() != b.size())

View File

@@ -44,6 +44,12 @@ inline std::string toHexString(std::string_view str)
tl::expected<std::basic_string<unsigned char>, std::string> fromHexString(std::string_view hex);
std::string toBase64String(std::basic_string_view<unsigned char> buf);
inline std::string toBase64String(std::string_view str)
{
return toBase64String(std::basic_string_view<unsigned char>{reinterpret_cast<const unsigned char *>(str.data()), str.size()});
}
bool stringEqualsIgnoreCase(std::string_view a, std::string_view b);
//void stringReplaceAll(char search, char replace, std::string &subject);