aboutsummaryrefslogtreecommitdiff
path: root/src/uint256.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uint256.cpp')
-rw-r--r--src/uint256.cpp36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/uint256.cpp b/src/uint256.cpp
index 7f81c3c448..2756a7f5cd 100644
--- a/src/uint256.cpp
+++ b/src/uint256.cpp
@@ -18,40 +18,32 @@ std::string base_blob<BITS>::GetHex() const
}
template <unsigned int BITS>
-void base_blob<BITS>::SetHex(const char* psz)
+void base_blob<BITS>::SetHexDeprecated(const std::string_view str)
{
std::fill(m_data.begin(), m_data.end(), 0);
- // skip leading spaces
- while (IsSpace(*psz))
- psz++;
+ const auto trimmed = util::RemovePrefixView(util::TrimStringView(str), "0x");
- // skip 0x
- if (psz[0] == '0' && ToLower(psz[1]) == 'x')
- psz += 2;
-
- // hex string to uint
+ // Note: if we are passed a greater number of digits than would fit as bytes
+ // in m_data, we will be discarding the leftmost ones.
+ // str="12bc" in a WIDTH=1 m_data => m_data[] == "\0xbc", not "0x12".
size_t digits = 0;
- while (::HexDigit(psz[digits]) != -1)
- digits++;
+ for (const char c : trimmed) {
+ if (::HexDigit(c) == -1) break;
+ ++digits;
+ }
unsigned char* p1 = m_data.data();
unsigned char* pend = p1 + WIDTH;
while (digits > 0 && p1 < pend) {
- *p1 = ::HexDigit(psz[--digits]);
+ *p1 = ::HexDigit(trimmed[--digits]);
if (digits > 0) {
- *p1 |= ((unsigned char)::HexDigit(psz[--digits]) << 4);
+ *p1 |= ((unsigned char)::HexDigit(trimmed[--digits]) << 4);
p1++;
}
}
}
template <unsigned int BITS>
-void base_blob<BITS>::SetHex(const std::string& str)
-{
- SetHex(str.c_str());
-}
-
-template <unsigned int BITS>
std::string base_blob<BITS>::ToString() const
{
return (GetHex());
@@ -60,14 +52,12 @@ std::string base_blob<BITS>::ToString() const
// Explicit instantiations for base_blob<160>
template std::string base_blob<160>::GetHex() const;
template std::string base_blob<160>::ToString() const;
-template void base_blob<160>::SetHex(const char*);
-template void base_blob<160>::SetHex(const std::string&);
+template void base_blob<160>::SetHexDeprecated(std::string_view);
// Explicit instantiations for base_blob<256>
template std::string base_blob<256>::GetHex() const;
template std::string base_blob<256>::ToString() const;
-template void base_blob<256>::SetHex(const char*);
-template void base_blob<256>::SetHex(const std::string&);
+template void base_blob<256>::SetHexDeprecated(std::string_view);
const uint256 uint256::ZERO(0);
const uint256 uint256::ONE(1);