52 #define DEBUG_COL_NO(LABEL,ADDED) \
54 std::cerr << std::string(ADDED,LABEL) << std::flush;
56 #define DEBUG_COL(LABEL,ADDED)
67 std::ostringstream oldState;
71 int datasize=
data.size();
74 if (
cfg.groupBy && ((
cfg.bytesPerLine %
cfg.groupBy) != 0))
76 s <<
"hexDumpData: cfg.bytesPerLine % cfg.groupBy != 0"
81 if (
cfg.group2By && ((
cfg.bytesPerLine %
cfg.group2By) != 0))
83 s <<
"hexDumpData: cfg.bytesPerLine % cfg.group2By != 0"
88 if (
cfg.groupBy && ((
cfg.group2By %
cfg.groupBy) != 0))
90 s <<
"hexDumpData: cfg.group2By % cfg.groupBy != 0"
99 s << std::hex << std::internal << std::noshowbase << std::setw(0);
101 unsigned bytesOnLastLine = datasize %
cfg.bytesPerLine;
102 if (bytesOnLastLine == 0)
103 bytesOnLastLine =
cfg.bytesPerLine;
105 cfg.computeLineSize(
cfg.bytesPerLine,
false),
106 cfg.computeLineSize(bytesOnLastLine,
true));
108 for (
int i=0; i<datasize; i++)
110 if (i%
cfg.bytesPerLine==0)
114 col =
cfg.prefix.length();
121 std::string indexBase(
cfg.baseIndex());
122 s << std::setfill(
'0')
123 << (
cfg.upperHex ? std::uppercase : std::nouppercase)
125 << (
cfg.hexIndex ? std::hex : std::dec)
126 << std::setw(
cfg.idxDigits)
128 << std::noshowbase << std::dec << std::nouppercase;
129 col += indexBase.length() +
cfg.idxDigits +
130 cfg.indexSep.length();
131 DEBUG_COL(
'I',indexBase.length() +
cfg.idxDigits +
cfg.indexSep.length());
134 unsigned char c=
data[i];
141 if (
cfg.groupBy && ((i %
cfg.groupBy) == 0) &&
cfg.showBaseData)
149 s << (
cfg.upperHex ? std::uppercase : std::nouppercase)
150 << std::hex << std::setw(2) << std::setfill(
'0') << (int)c
151 << std::dec << std::nouppercase << std::noshowbase;
154 if (((i %
cfg.bytesPerLine) == (
cfg.bytesPerLine-1)) ||
157 if (i == (datasize-1))
162 col +=
cfg.dataFinal.length();
165 else if ((i %
cfg.bytesPerLine) == (
cfg.bytesPerLine-1))
171 col +=
cfg.dataEndSep.length();
177 int extra = linesize-col;
178 std::string space(extra,
' ');
179 s << space <<
cfg.preText;
191 else if (
cfg.group2By && ((i %
cfg.group2By) == (
cfg.group2By-1)))
195 col +=
cfg.group2Sep.length();
198 else if (
cfg.groupBy && ((i %
cfg.groupBy) == (
cfg.groupBy-1)))
202 col +=
cfg.groupSep.length();
211 unsigned exponent,
unsigned width,
char expChar,
214 std::ostringstream oss;
216 std::string::size_type
pos;
236 oss << std::scientific << std::setprecision(mantissa-2)
243 rv.insert(
pos-1, 1,
'0');
247 oss << std::scientific << std::setprecision(mantissa-1)
257 oss << std::scientific << std::setprecision(mantissa-1) << d;
263 unsigned currentExpSize = rv.length() - (
pos+2);
264 if (currentExpSize < exponent)
265 rv.insert(
pos+2, exponent - currentExpSize,
'0');
269 if (rv.length() < width)
274 rv.append(width-rv.length(),
' ');
277 rv.insert(0, width-rv.length(),
' ');