std::setbase - cppreference.com

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

std::ios_base::hex

.

the value 8 sets

std::ios_base::oct

.

the value 10 sets

std::ios_base::dec

.

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

LWG 183

C++98 setbase could only be used with streams
of type

std::ostream

or

std::istream

usable with any
character stream See also