Formatted output
I've been beating my head against this for a little while, so perhaps
someone can help me out here? The code below should output exactly as
follows (the hex data lines up in a fixed font):
DATA 0123456789abcdef0123456789abcdef
0123456789abcdef0123456789abcdef
and the code does indeed do that when I use the fprintf() call. When
I comment that line out and use the iostream line, I get gibberish. I
guess I'm just not 'getting' C++ formatted I/O yet.
Here's the code, for what it's worth:
#include <cstdio>
#include <iostream>
#include <iomanip>
static void
output(const std::string& s, unsigned char* buf, const size_t len)
{
std::cerr << s << ' ';
for (unsigned int i = 0; i < len; ++i)
{
int j = (i+1) % 16;
// std::cerr << std::setw(2) << std::ios::hex << buf[i]; // no good
fprintf(stderr, "%02x", buf[i]); // works fine
if ((i+1) < len && j == 0)
std::cerr << '\n' << std::setw(s.size()) << ' ';
}
std::cerr << '\n';
}
int main()
{ unsigned char data[] =
{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
output("DATA", data, 32);
exit(0);
}