std::setbase
De cppreference.com
| Definido en el archivo de encabezado <iomanip>
|
||
/* no especificado*/ setbase( int base );
|
||
Establece la base numérica del flujo. Cuando se utiliza en una expresión out << setbase(base) o in >> setbase(base), cambia el indicador basefield del flujo out o in, según el valor de base:
- el valor
16establecebasefielden std::ios_base::hex. - el valor
8establece std::ios_base::oct. - el valor
10establece std::ios_base::dec.
Los valores de base distintos de 8, 10 o 16 restablecen basefield a cero, lo que corresponde a la salida decimal y a la entrada dependiente del prefijo.
Parámetros
| base | - | El nuevo valor para basefield.
|
Valor de retorno
Un objeto de tipo no especificado tal que
- si
outes un objeto de tipostd::basic_ostream<CharT, Traits>, la expresiónout << setbase(base)- tiene tipo
std::basic_ostream<CharT, Traits>& - tiene valor
out - se comporta como si llamara a
f(out, base)
- tiene tipo
- si
ines un objeto de tipostd::basic_istream<CharT, Traits>, la expresiónin >> setbase(base)- tiene tipo
std::basic_istream<CharT, Traits>& - tiene valor
in - se comporta como si llamara a
f(in, base)
- tiene tipo
donde la función f se define como:
void f(std::ios_base& str, int base)
{
// establecer basefield
str.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);
}
Ejemplo
Ejecuta este código
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
std::cout << "Analizando cadena \"10 0x10 010\"\n";
int n1, n2, n3;
std::istringstream s("10 0x10 010");
s >> std::setbase(16) >> n1 >> n2 >> n3;
std::cout << "análisis hexadecimal: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
s.clear();
s.seekg(0);
s >> std::setbase(0) >> n1 >> n2 >> n3;
std::cout << "análisis dependiente del prefijo: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
std::cout << "salida hexadecimal: " << std::setbase(16)
<< std::showbase << n1 << ' ' << n2 << ' ' << n3 << '\n';
}
Salida:
Analizando cadena "10 0x10 010"
análisis hexadecimal: 16 16 16
análisis dependiente del prefijo: 10 16 8
salida hexadecimal: 0xa 0x10 0x8
Defect reports
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 183 | C++98 | setbase solo se podía usar con flujos de tipo std::ostream o std::istream.
|
Usable con cualquier flujo de caracteres. |
Véase también
| Cambia la base utilizada para la E/S de enteros. (función) | |
| Controla si se utiliza prefijo para indicar base numérica. (función) |