Project

General

Profile

Download (2.21 KB) Statistics
| Branch: | Revision:
#include <cmath>
#include <cstdint>
#include <iomanip>
#include <iostream>
#include <ostream>

struct format_hex
{
uint64_t value;
const uint32_t width;
const char fill;

format_hex(uint64_t val, uint32_t width_=4, char fill_='0')
: value(val),
width(width_),
fill(fill_)
{
}

friend inline std::ostream& operator<<(
std::ostream& os,
const format_hex& rhs)
{
return os << std::hex << std::setfill(rhs.fill) << std::setw(rhs.width)
<< std::uppercase << static_cast<long>(rhs.value) << std::dec;
}
};


/**
* Stream version of hex bytes inline little endian
*/
struct HexBytesInlineLE
{
const uint8_t* data;
double numBytes;
const char* sep;

HexBytesInlineLE(const char* data_, double numBytes_, const char* sep_=" ")
: data(reinterpret_cast<const uint8_t*>(data_)), numBytes(numBytes_), sep(sep_)
{
}

HexBytesInlineLE(const uint8_t* data_, double numBytes_, const char* sep_=" ")
: data(data_), numBytes(numBytes_), sep(sep_)
{
}

friend inline std::ostream& operator<<(
std::ostream& os,
const HexBytesInlineLE& rhs)
{
for (int32_t idx = rhs.numBytes - 1; idx > -1; --idx)
{
os << format_hex(rhs.data[idx], 2) << ((idx <= (rhs.numBytes - 1)) ? rhs.sep : "");
}

return os;
}
};


/**
* Stream version of hex bytes inline big endian
*/
struct HexBytesInlineBE
{
const uint8_t* data;
double numBytes;
const char* sep;

HexBytesInlineBE(const char* data_, double numBytes_, const char* sep_=" ")
: data(reinterpret_cast<const uint8_t*>(data_)), numBytes(numBytes_), sep(sep_)
{
}

HexBytesInlineBE(const uint8_t* data_, double numBytes_, const char* sep_=" ")
: data(data_), numBytes(numBytes_), sep(sep_)
{
}

friend inline std::ostream& operator<<(
std::ostream& os,
const HexBytesInlineBE& rhs)
{
for (uint32_t idx = 0; idx < rhs.numBytes; ++idx)
{
os << format_hex(rhs.data[idx], 2) << ((idx < (rhs.numBytes - 1)) ? rhs.sep : "");
}

return os;
}
};
(6-6/8)