Namespaces
Variants

std:: setbase

From cppreference.net
< cpp ‎ | io ‎ | manip
Definido en el encabezado <iomanip>
/*unspecified*/ setbase ( int base ) ;

Establece la base numérica del flujo. Cuando se usa en una expresión out << setbase ( base ) o in >> setbase ( base ) , cambia el indicador basefield del flujo out o in , dependiendo del valor de base :

Valores de base diferentes de 8, 10 o 16 restablecen basefield a cero, lo que corresponde a salida decimal y entrada dependiente del prefijo.

Contenidos

Parámetros

base - nuevo valor para basefield

Valor de retorno

Un objeto de tipo no especificado tal que

  • si out es un objeto de tipo std:: basic_ostream < CharT, Traits > , la expresión out << setbase ( base )
    • tiene tipo std:: basic_ostream < CharT, Traits > &
    • tiene valor out
    • se comporta como si llamara a f ( out, base )
  • si in es un objeto de tipo std:: basic_istream < CharT, Traits > , la expresión in >> setbase ( base )
    • tiene tipo std:: basic_istream < CharT, Traits > &
    • tiene valor in
    • se comporta como si llamara a f ( in, base )

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

#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
    std::cout << "Parsing string \"10 0x10 010\"\n";
    int n1, n2, n3;
    std::istringstream s("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';
}

Salida:

Parsing string "10 0x10 010"
hexadecimal parse: 16 16 16
prefix-dependent parse: 10 16 8
hex output: 0xa 0x10 0x8

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 183 C++98 setbase solo podía usarse con flujos
de tipo std::ostream o std::istream
utilizable con cualquier
flujo de caracteres

Véase también

cambia la base utilizada para E/S de enteros
(función)
controla si se utiliza prefijo para indicar la base numérica
(función)