12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright (c) 2009-2010 Satoshi Nakamoto
- // Copyright (c) 2009-2016 The Bitcoin Core developers
- // Distributed under the MIT software license, see the accompanying
- // file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
- #include "uint256.h"
-
- #include "utilstrencodings.h"
-
- #include <stdio.h>
- #include <string.h>
-
- template <unsigned int BITS>
- base_blob<BITS>::base_blob(const std::vector<unsigned char>& vch)
- {
- assert(vch.size() == sizeof(data));
- memcpy(data, &vch[0], sizeof(data));
- }
-
- template <unsigned int BITS>
- std::string base_blob<BITS>::GetHex() const
- {
- return HexStr(std::reverse_iterator<const uint8_t*>(data + sizeof(data)), std::reverse_iterator<const uint8_t*>(data));
- }
-
- template <unsigned int BITS>
- void base_blob<BITS>::SetHex(const char* psz)
- {
- memset(data, 0, sizeof(data));
-
- // skip leading spaces
- while (isspace(*psz))
- psz++;
-
- // skip 0x
- if (psz[0] == '0' && tolower(psz[1]) == 'x')
- psz += 2;
-
- // hex string to uint
- const char* pbegin = psz;
- while (::HexDigit(*psz) != -1)
- psz++;
- psz--;
- unsigned char* p1 = (unsigned char*)data;
- unsigned char* pend = p1 + WIDTH;
- while (psz >= pbegin && p1 < pend) {
- *p1 = ::HexDigit(*psz--);
- if (psz >= pbegin) {
- *p1 |= ((unsigned char)::HexDigit(*psz--) << 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());
- }
-
- // Explicit instantiations for base_blob<160>
- template base_blob<160>::base_blob(const std::vector<unsigned char>&);
- 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&);
-
- // Explicit instantiations for base_blob<256>
- template base_blob<256>::base_blob(const std::vector<unsigned char>&);
- 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&);
|