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 format-string. > 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. §21.3.7.9/4 (semantics of operator>> on a string) : « [...], padding as described in stage 3 of 22.2.2.2.2, where n is the larger of os.width() and str.size(); [...] » the table 61 in §22.2.2.2.2/19 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. -- Samuel _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost