[fnd] Add SimpleTextOutput utility class.

This commit is contained in:
jakcron 2018-04-07 15:57:33 +08:00
parent bafdaffe13
commit 2ff4ea8037
2 changed files with 79 additions and 0 deletions

View file

@ -0,0 +1,18 @@
#pragma once
#include <fnd/types.h>
namespace fnd
{
class SimpleTextOutput
{
public:
static void hxdStyleDump(const byte_t* data, size_t len, size_t row_len, size_t byte_grouping_size);
static void hxdStyleDump(const byte_t* data, size_t len);
static void hexDump(const byte_t* data, size_t len, size_t row_len, size_t indent_len);
static void hexDump(const byte_t* data, size_t len);
private:
static const size_t kDefaultRowLen = 0x10;
static const size_t kDefaultByteGroupingSize = 1;
};
}

View file

@ -0,0 +1,61 @@
#include <fnd/SimpleTextOutput.h>
#include <cstdio>
void fnd::SimpleTextOutput::hxdStyleDump(const byte_t* data, size_t len, size_t row_len, size_t byte_grouping_size)
{
// iterate over blocks
for (size_t i = 0; i < (len / row_len); i++)
{
// for block i print each byte
for (size_t j = 0; j < row_len; j++)
{
printf("%02X", data[(i * row_len) + j]);
if (((j+1) % byte_grouping_size) == 0)
{
putchar(' ');
}
}
printf(" ");
for (size_t j = 0; j < row_len; j++)
{
printf("%c", isalnum(data[(i * row_len) + j]) ? data[(i * row_len) + j] : '.');
}
printf("\n");
}
}
void fnd::SimpleTextOutput::hxdStyleDump(const byte_t* data, size_t len)
{
hxdStyleDump(data, len, kDefaultRowLen, kDefaultByteGroupingSize);
}
void fnd::SimpleTextOutput::hexDump(const byte_t* data, size_t len, size_t row_len, size_t indent_len)
{
for (size_t i = 0; i < len; i++)
{
if ((i % row_len) == 0)
{
if (i > 0)
putchar('\n');
for (size_t j = 0; j < indent_len; j++)
{
putchar(' ');
}
}
printf("%02X", data[i]);
if ((i+1) >= len)
{
putchar('\n');
}
}
}
void fnd::SimpleTextOutput::hexDump(const byte_t* data, size_t len)
{
for (size_t i = 0; i < len; i++)
{
printf("%02X", data[i]);
}
putchar('\n');
}