Boost logo

Boost :

From: Samuel Krempp (krempp_at_[hidden])
Date: 2002-11-26 13:27:56

Le jeu 14/11/2002 à 16:31, Alisdair Meredith a écrit :
> I beleive this is some test code that does roughly something similar to
> the library implementation:

right, this code is equivalent to what format does, for some

> int main()
> {
> std::cout.setf( std::ios::showbase );
> std::cout << "BCB hex test: "
> << std::setfill( '0' )
> << std::setw( 8 )
> << std::internal
> << std::hex
> << 0x1234 << std::endl;
> }
> Is this a correct simplification on the library algorithm for this test
> case?

you did not tell how you used format, but I assume
cout << format("BCB hex test: %08x") % 0x1234 << endl;
and then, yes, it's a correct simplification.

> I'm not sure about relying on 'internal' to separate 0x from 1234
> before padding. Is this the technique format uses? And if so, is it
> correct?

yes, and yes. :-)

> [I'm no streams expert, and will happily file a bug report with borland
> if someone can quote me a relevent section of the standard, if that is
> indeed the case]

the description of the effect of 'internal' padding in the norm is
rather ambiguous sometimes (e.g. the effect on strings is subject to
interpretation), but pretty clear in this case.

§ (semantics of operator>> on a string) : « [...], padding
 as described in stage 3 of, where n is the larger of
 os.width() and str.size(); [...] »

the table 61 in § says where to pad, depending on which of
the four cases we are in.
the 4th case is "adjustfield == internal and representation after stage
1 began with 0x or 0X"
(the stage 1 is the basic number-to-string conversion)

for this case the location where to pad is "after 'x' or 'X' "

so, without a doubt, your program here must produce "0x001234"
If it doesnt, you can file a bug report to your stream's author.


Boost list run by bdawes at, gregod at, cpdaniel at, john at