Open po0p opened 4 months ago
Probably something like this (if this is bad, please explain to me why, i am not a great coder by any means)
util::nstring to_string() const //member of HexDump
{
util::nostringstream new_stream;//content is identical to << operator, aside from the fact that new stream is created
new_stream << std::hex << std::setfill(PLOG_NSTR('0'));
for (size_t i = 0; i < m_size;)
{
new_stream << std::setw(2) << static_cast<int>(m_ptr[i]);
if (++i < m_size)
{
if (m_group > 0 && i % m_group == 0)
{
new_stream << m_groupSeparator;
}
else
{
new_stream << m_digitSeparator;
}
}
}
return new_stream.str();
}
notes:
1.util::nstring
may be unexpected, it is wstring for me and i wondered why i was getting no output when testing it first time :)
2.have to deal with c_str when using printf.
3.new_stream
in theory is destroyed after leaving to_string
scope.
4..str()
on nostringstream
(which afaik just uses correct wideness basic_ostringstream) creates a copy, so final string lives after leaving scope.
Hey @po0p ! Yes, it's possible. Unfortunately it will look a little bit ugly as it needs an additional call to c_str()
:
PLOGI.printf("test format: %s", plog::hexdump(arr).str().c_str());
The implementation is simpler: it's basically a one line of code. I'll push it in a while.
Hey @po0p ! Yes, it's possible. Unfortunately it will look a little bit ugly as it needs an additional call to
c_str()
:
Hey, thanks!
Its also quite useful if you are using std::format (which wont need .c_str()
call but still i believe dont support <<
operator)
Or even more ugliness like
PLOGI<<"asd"<<std::format("...",v1,v2,v3) << plog::hexdump << "dfgh";
Actual usecase example right now (i implemented to_string
already)
PLOGW << std::format("call. len:{} input: {}(@{:#x}) result: {} st:\n{}",
length,
plog::hexdump(input, min_l).separator("", "").to_string(),
(uint64_t)input,//input is char* so needs casting to display address
plog::hexdump(out, 32).separator("", "").to_string(),
stacktrace);
Hey, great library! I am coming from learning C-style code first, so I very much love printf-type formatting (And still will love probably, writing
%llx%d,<size_t><int>
takes less inputs thanstd::hex << std::dec
) That being said, hexdump and ascdump come very handy in a lot of cases, but they only support<<
operator.Propose adding a
.str
/.to_str
method, that would either return a char* or std::string/wstring (whichever you prefer), for the reason of being usable with printf-type formatting.