1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2015 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
8 #include "utilstrencodings.h"
13 template <unsigned int BITS
>
14 base_blob
<BITS
>::base_blob(const std::vector
<unsigned char>& vch
)
16 assert(vch
.size() == sizeof(data
));
17 memcpy(data
, &vch
[0], sizeof(data
));
20 template <unsigned int BITS
>
21 std::string base_blob
<BITS
>::GetHex() const
23 char psz
[sizeof(data
) * 2 + 1];
24 for (unsigned int i
= 0; i
< sizeof(data
); i
++)
25 sprintf(psz
+ i
* 2, "%02x", data
[sizeof(data
) - i
- 1]);
26 return std::string(psz
, psz
+ sizeof(data
) * 2);
29 template <unsigned int BITS
>
30 void base_blob
<BITS
>::SetHex(const char* psz
)
32 memset(data
, 0, sizeof(data
));
34 // skip leading spaces
39 if (psz
[0] == '0' && tolower(psz
[1]) == 'x')
43 const char* pbegin
= psz
;
44 while (::HexDigit(*psz
) != -1)
47 unsigned char* p1
= (unsigned char*)data
;
48 unsigned char* pend
= p1
+ WIDTH
;
49 while (psz
>= pbegin
&& p1
< pend
) {
50 *p1
= ::HexDigit(*psz
--);
52 *p1
|= ((unsigned char)::HexDigit(*psz
--) << 4);
58 template <unsigned int BITS
>
59 void base_blob
<BITS
>::SetHex(const std::string
& str
)
64 template <unsigned int BITS
>
65 std::string base_blob
<BITS
>::ToString() const
70 // Explicit instantiations for base_blob<160>
71 template base_blob
<160>::base_blob(const std::vector
<unsigned char>&);
72 template std::string base_blob
<160>::GetHex() const;
73 template std::string base_blob
<160>::ToString() const;
74 template void base_blob
<160>::SetHex(const char*);
75 template void base_blob
<160>::SetHex(const std::string
&);
77 // Explicit instantiations for base_blob<256>
78 template base_blob
<256>::base_blob(const std::vector
<unsigned char>&);
79 template std::string base_blob
<256>::GetHex() const;
80 template std::string base_blob
<256>::ToString() const;
81 template void base_blob
<256>::SetHex(const char*);
82 template void base_blob
<256>::SetHex(const std::string
&);