mirror of
https://github.com/Zygo/bees.git
synced 2025-05-18 05:45:45 +02:00
bytevector: add ostream output with hexdump
There is a hexdump template in fs. Move hexdump to its own header, then ByteVector can use it too. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
parent
9cdeb608f5
commit
d1015b683f
@ -2,6 +2,7 @@
|
|||||||
#define _CRUCIBLE_BYTEVECTOR_H_
|
#define _CRUCIBLE_BYTEVECTOR_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@ -66,6 +67,7 @@ namespace crucible {
|
|||||||
return reinterpret_cast<T*>(data());
|
return reinterpret_cast<T*>(data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ostream & operator<<(ostream &os, const ByteVector &bv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _CRUCIBLE_BYTEVECTOR_H_
|
#endif // _CRUCIBLE_BYTEVECTOR_H_
|
||||||
|
36
include/crucible/hexdump.h
Normal file
36
include/crucible/hexdump.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef CRUCIBLE_HEXDUMP_H
|
||||||
|
#define CRUCIBLE_HEXDUMP_H
|
||||||
|
|
||||||
|
#include "crucible/string.h"
|
||||||
|
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
|
namespace crucible {
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
template <class V>
|
||||||
|
ostream &
|
||||||
|
hexdump(ostream &os, const V &v)
|
||||||
|
{
|
||||||
|
os << "V { size = " << v.size() << ", data:\n";
|
||||||
|
for (size_t i = 0; i < v.size(); i += 8) {
|
||||||
|
string hex, ascii;
|
||||||
|
for (size_t j = i; j < i + 8; ++j) {
|
||||||
|
if (j < v.size()) {
|
||||||
|
uint8_t c = v[j];
|
||||||
|
char buf[8];
|
||||||
|
sprintf(buf, "%02x ", c);
|
||||||
|
hex += buf;
|
||||||
|
ascii += (c < 32 || c > 126) ? '.' : c;
|
||||||
|
} else {
|
||||||
|
hex += " ";
|
||||||
|
ascii += ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os << astringprintf("\t%08x %s %s\n", i, hex.c_str(), ascii.c_str());
|
||||||
|
}
|
||||||
|
return os << "}";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CRUCIBLE_HEXDUMP_H
|
@ -1,6 +1,8 @@
|
|||||||
#include "crucible/bytevector.h"
|
#include "crucible/bytevector.h"
|
||||||
|
|
||||||
#include "crucible/error.h"
|
#include "crucible/error.h"
|
||||||
|
#include "crucible/hexdump.h"
|
||||||
|
#include "crucible/string.h"
|
||||||
|
|
||||||
namespace crucible {
|
namespace crucible {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -144,4 +146,10 @@ namespace crucible {
|
|||||||
{
|
{
|
||||||
return m_ptr.get();
|
return m_ptr.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ostream&
|
||||||
|
operator<<(ostream &os, const ByteVector &bv) {
|
||||||
|
hexdump(os, bv);
|
||||||
|
return os;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
25
lib/fs.cc
25
lib/fs.cc
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "crucible/error.h"
|
#include "crucible/error.h"
|
||||||
#include "crucible/fd.h"
|
#include "crucible/fd.h"
|
||||||
|
#include "crucible/hexdump.h"
|
||||||
#include "crucible/limits.h"
|
#include "crucible/limits.h"
|
||||||
#include "crucible/ntoa.h"
|
#include "crucible/ntoa.h"
|
||||||
#include "crucible/string.h"
|
#include "crucible/string.h"
|
||||||
@ -866,30 +867,6 @@ namespace crucible {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class V>
|
|
||||||
ostream &
|
|
||||||
hexdump(ostream &os, const V &v)
|
|
||||||
{
|
|
||||||
os << "V { size = " << v.size() << ", data:\n";
|
|
||||||
for (size_t i = 0; i < v.size(); i += 8) {
|
|
||||||
string hex, ascii;
|
|
||||||
for (size_t j = i; j < i + 8; ++j) {
|
|
||||||
if (j < v.size()) {
|
|
||||||
uint8_t c = v[j];
|
|
||||||
char buf[8];
|
|
||||||
sprintf(buf, "%02x ", c);
|
|
||||||
hex += buf;
|
|
||||||
ascii += (c < 32 || c > 126) ? '.' : c;
|
|
||||||
} else {
|
|
||||||
hex += " ";
|
|
||||||
ascii += ' ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
os << astringprintf("\t%08x %s %s\n", i, hex.c_str(), ascii.c_str());
|
|
||||||
}
|
|
||||||
return os << "}";
|
|
||||||
}
|
|
||||||
|
|
||||||
string
|
string
|
||||||
btrfs_search_type_ntoa(unsigned type)
|
btrfs_search_type_ntoa(unsigned type)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user