Added from hex converters

This commit is contained in:
2021-11-04 01:41:02 +01:00
parent 850a42adc4
commit f96edeec6a
2 changed files with 32 additions and 0 deletions

View File

@ -95,4 +95,27 @@ std::string toHexString(std::basic_string_view<unsigned char> buf)
return hex;
}
tl::expected<std::basic_string_view<unsigned char>, std::string> fromHexString(std::string_view str)
{
const auto binMaxLen = (str.size()+1)/2;
uint8_t binBuf[binMaxLen];
size_t binLen;
if (const auto result = sodium_hex2bin(binBuf, binMaxLen, str.data(), str.size(), NULL, &binLen, NULL); result != 0)
{
ESP_LOGW(TAG, "sodium_hex2bin() failed with %i", result);
return tl::make_unexpected(fmt::format("sodium_hex2bin() failed with {}", result));
}
if (binLen != str.size() / 2)
{
ESP_LOGW(TAG, "invalid hex");
return tl::make_unexpected("invalid hex");
}
const std::basic_string_view<unsigned char> bin{binBuf, binLen};
return bin;
}
} // namespace espcpputils

View File

@ -4,6 +4,9 @@
#include <string>
#include <string_view>
// 3rdparty lib includes
#include <tl/expected.hpp>
// esp-idf includes
#include <esp_sntp.h>
#include <esp_log.h>
@ -21,4 +24,10 @@ inline std::string toHexString(std::string_view str)
return toHexString(std::basic_string_view<unsigned char>{reinterpret_cast<const unsigned char *>(str.data()), str.size()});
}
tl::expected<std::basic_string_view<unsigned char>, std::string> fromHexString(std::string_view str);
inline tl::expected<std::basic_string_view<unsigned char>, std::string> fromHexString(std::basic_string_view<unsigned char> str)
{
return fromHexString(std::string_view{reinterpret_cast<const char *>(str.data()), str.size()});
}
} // namespace espcpputils