fix(hex): rewrited on string_view

This commit is contained in:
2024-09-13 13:38:26 +03:00
parent 6065245b82
commit 97e714fba0

View File

@ -36,8 +36,8 @@ namespace hex
} }
void encode(const uint8_t *data, uint64_t data_size, char *str) noexcept void encode(const uint8_t *data, uint64_t data_size, char *str) noexcept
{ {
uint64_t i = 0; std::string_view sv(str);
while (str[i] != '\0' && i / 2 < data_size) for(size_t i = 0; i < sv.size() && i / 2 < data_size; i++)
{ {
if (i % 2 == 0) if (i % 2 == 0)
{ {
@ -45,7 +45,6 @@ namespace hex
} else { } else {
str[i] = hexdigits[data[i / 2] & 0x0F]; str[i] = hexdigits[data[i / 2] & 0x0F];
} }
i++;
} }
} }
std::string encode(const std::vector<uint8_t> &data) noexcept std::string encode(const std::vector<uint8_t> &data) noexcept
@ -60,15 +59,14 @@ namespace hex
{ {
throw std::logic_error("hex::decode: out of digits map"); throw std::logic_error("hex::decode: out of digits map");
} }
uint64_t i = 0; std::string_view sv(str);
while (i < data_size && str[i * 2] != '\0') if (sv.size() % 2 != 0)
{
throw std::logic_error("hex::decode: isn't hex");
}
for (size_t i = 0; i < data_size && i * 2 < sv.size(); i++)
{ {
if(str[i + 1] == '\0')
{
throw std::logic_error("hex::decode: isn't hex");
}
data[i] = hexmap[(int8_t)str[i * 2]] << 4 | hexmap[(int8_t)str[i * 2 + 1]]; data[i] = hexmap[(int8_t)str[i * 2]] << 4 | hexmap[(int8_t)str[i * 2 + 1]];
i++;
} }
} }
std::vector<uint8_t> decode(const std::string &str) std::vector<uint8_t> decode(const std::string &str)