diff options
author | Pieter Wuille <pieter@wuille.net> | 2022-04-04 11:08:08 -0400 |
---|---|---|
committer | MacroFake <falke.marco@gmail.com> | 2022-04-27 14:12:55 +0200 |
commit | c1d165a8c2678c31aced5e1d46231d9996b0774a (patch) | |
tree | f57d00bf2978b248e741e75fe142eb4b32449b5c /src/util/strencodings.cpp | |
parent | f58c1f1a446716a245ca204e2ac1a219455f1340 (diff) | |
download | bitcoin-c1d165a8c2678c31aced5e1d46231d9996b0774a.tar.xz |
Make ParseHex use string_view
Diffstat (limited to 'src/util/strencodings.cpp')
-rw-r--r-- | src/util/strencodings.cpp | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp index 940fa90da2..f5288eca17 100644 --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -81,32 +81,24 @@ bool IsHexNumber(const std::string& str) return (str.size() > starting_location); } -std::vector<unsigned char> ParseHex(const char* psz) +std::vector<unsigned char> ParseHex(std::string_view str) { // convert hex dump to vector std::vector<unsigned char> vch; - while (true) - { - while (IsSpace(*psz)) - psz++; - signed char c = HexDigit(*psz++); - if (c == (signed char)-1) - break; - auto n{uint8_t(c << 4)}; - c = HexDigit(*psz++); - if (c == (signed char)-1) - break; - n |= c; - vch.push_back(n); + auto it = str.begin(); + while (it != str.end() && it + 1 != str.end()) { + if (IsSpace(*it)) { + ++it; + continue; + } + auto c1 = HexDigit(*(it++)); + auto c2 = HexDigit(*(it++)); + if (c1 < 0 || c2 < 0) break; + vch.push_back(uint8_t(c1 << 4) | c2); } return vch; } -std::vector<unsigned char> ParseHex(const std::string& str) -{ - return ParseHex(str.c_str()); -} - void SplitHostPort(std::string in, uint16_t& portOut, std::string& hostOut) { size_t colon = in.find_last_of(':'); |