mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-28 04:52:36 +02:00

-BEGIN VERIFY SCRIPT- ren() { sed -i "s!\<$1\>!$2!g" $( git grep -l "$1" -- "./src" ":(exclude)src/span.h" ":(exclude)src/leveldb/db/log_test.cc" ) ; } ren Span std::span ren AsBytes std::as_bytes ren AsWritableBytes std::as_writable_bytes sed -i 's!SpanPopBack(Span!SpanPopBack(std::span!g' ./src/span.h -END VERIFY SCRIPT-
68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
// Copyright (c) 2009-present 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 <crypto/hex_base.h>
|
|
|
|
#include <array>
|
|
#include <cstring>
|
|
#include <string>
|
|
|
|
namespace {
|
|
|
|
using ByteAsHex = std::array<char, 2>;
|
|
|
|
constexpr std::array<ByteAsHex, 256> CreateByteToHexMap()
|
|
{
|
|
constexpr char hexmap[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
|
|
|
std::array<ByteAsHex, 256> byte_to_hex{};
|
|
for (size_t i = 0; i < byte_to_hex.size(); ++i) {
|
|
byte_to_hex[i][0] = hexmap[i >> 4];
|
|
byte_to_hex[i][1] = hexmap[i & 15];
|
|
}
|
|
return byte_to_hex;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
std::string HexStr(const std::span<const uint8_t> s)
|
|
{
|
|
std::string rv(s.size() * 2, '\0');
|
|
static constexpr auto byte_to_hex = CreateByteToHexMap();
|
|
static_assert(sizeof(byte_to_hex) == 512);
|
|
|
|
char* it = rv.data();
|
|
for (uint8_t v : s) {
|
|
std::memcpy(it, byte_to_hex[v].data(), 2);
|
|
it += 2;
|
|
}
|
|
|
|
assert(it == rv.data() + rv.size());
|
|
return rv;
|
|
}
|
|
|
|
const signed char p_util_hexdigit[256] =
|
|
{ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,
|
|
-1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,0xa,0xb,0xc,0xd,0xe,0xf,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
|
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, };
|
|
|
|
signed char HexDigit(char c)
|
|
{
|
|
return p_util_hexdigit[(unsigned char)c];
|
|
}
|
|
|