From cppreference.com
/*unspecified*/setbase(intbase);Sets the numeric base of the stream. When used in an expression out<<setbase(base) or in>>setbase(base), changes the basefield flag of the stream out or in, depending on the value of base:
the value 16 sets basefield to
.
the value 8 sets
.
the value 10 sets
.
Values of base other than 8, 10, or 16 reset basefield to zero, which corresponds to decimal output and prefix-dependent input.
Parameters
base - new value for basefield Return value
An object of unspecified type such that
if out is an object of type std::basic_ostream<CharT,Traits>, the expression out<<setbase(base)has type std::basic_ostream<CharT,Traits>&
has value out
behaves as if it called f(out,base)
if in is an object of type std::basic_istream<CharT,Traits>, the expression in>>setbase(base)has type std::basic_istream<CharT,Traits>&
has value in
behaves as if it called f(in,base)
where the function f is defined as:
voidf(std::ios_base&str,intbase){// set basefieldstr.setf(base==8?std::ios_base::oct:base==10?std::ios_base::dec:base==16?std::ios_base::hex:std::ios_base::fmtflags(0),std::ios_base::basefield);}Example
Run this code
#include<iomanip>#include<iostream>#include<sstream>intmain(){std::cout<<"Parsing string \"10 0x10 010\"\n";intn1,n2,n3;std::istringstreams("10 0x10 010");s>>std::setbase(16)>>n1>>n2>>n3;std::cout<<"hexadecimal parse: "<<n1<<' '<<n2<<' '<<n3<<'\n';s.clear();s.seekg(0);s>>std::setbase(0)>>n1>>n2>>n3;std::cout<<"prefix-dependent parse: "<<n1<<' '<<n2<<' '<<n3<<'\n';std::cout<<"hex output: "<<std::setbase(16)<<std::showbase<<n1<<' '<<n2<<' '<<n3<<'\n';}Output:
Parsing string "10 0x10 010" hexadecimal parse: 16 16 16 prefix-dependent parse: 10 16 8 hex output: 0xa 0x10 0x8 Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++98 setbase could only be used with streams
of type
or
usable with any
character stream See also