22std::string
hexdump(
const void*
const data,
size_t size) {
23 const unsigned char*
const cdata =
24 static_cast<const unsigned char*
>(data);
29 static const char xdigits[16] = {
30 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
31 '8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
34 std::string::iterator oi = out.begin();
35 for (
const unsigned char* si = cdata; si != cdata + size; ++si) {
36 *oi++ = xdigits[(*si & 0xF0) >> 4];
37 *oi++ = xdigits[(*si & 0x0F)];
43std::string
hexdump(
const std::string& str) {
44 return hexdump(str.data(), str.size());
47std::string
hexdump(
const std::vector<char>& data) {
48 return hexdump(data.data(), data.size());
51std::string
hexdump(
const std::vector<std::uint8_t>& data) {
52 return hexdump(data.data(), data.size());
56 const std::string& str,
const std::string& var_name) {
58 std::ostringstream header;
59 header <<
"const std::uint8_t " << var_name <<
"[" << str.size() <<
"] = {\n";
61 static const int perline = 16;
63 std::string out = header.str();
64 out.reserve(out.size() + (str.size() * 5) - 1 + (str.size() / 16) + 4);
66 static const char xdigits[16] = {
67 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
68 '8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
71 std::string::size_type ci = 0;
73 for (std::string::const_iterator si = str.begin(); si != str.end();
77 out += xdigits[(*si & 0xF0) >> 4];
78 out += xdigits[(*si & 0x0F)];
80 if (ci + 1 < str.size()) {
83 if (ci % perline == perline - 1)
96std::string
hexdump_lc(
const void*
const data,
size_t size) {
97 const unsigned char*
const cdata =
98 static_cast<const unsigned char*
>(data);
101 out.resize(size * 2);
103 static const char xdigits[16] = {
104 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
105 '8',
'9',
'a',
'b',
'c',
'd',
'e',
'f'
108 std::string::iterator oi = out.begin();
109 for (
const unsigned char* si = cdata; si != cdata + size; ++si) {
110 *oi++ = xdigits[(*si & 0xF0) >> 4];
111 *oi++ = xdigits[(*si & 0x0F)];
125std::string
hexdump_lc(
const std::vector<std::uint8_t>& data) {
135 for (std::string::const_iterator si = str.begin(); si != str.end(); ++si) {
179 default:
throw std::runtime_error(
"Invalid string for hex conversion");
184 throw std::runtime_error(
"Invalid string for hex conversion");
226 default:
throw std::runtime_error(
"Invalid string for hex conversion");
229 out +=
static_cast<char>(c);
std::string hexdump_lc(const void *const data, size_t size)
Dump a (binary) string as a sequence of lowercase hexadecimal pairs.
std::string parse_hexdump(const std::string &str)
Read a string as a sequence of hexadecimal pairs.
std::string hexdump_sourcecode(const std::string &str, const std::string &var_name)
Dump a (binary) string into a C source code snippet.
std::string hexdump(const void *const data, size_t size)
Dump a (binary) string as a sequence of uppercase hexadecimal pairs.