Namespaces
Variants

std:: setbase

From cppreference.net
< cpp ‎ | io ‎ | manip
Défini dans l'en-tête <iomanip>
/*unspecified*/ setbase ( int base ) ;

Définit la base numérique du flux. Lorsqu'il est utilisé dans une expression out << setbase ( base ) ou in >> setbase ( base ) , modifie le drapeau basefield du flux out ou in , selon la valeur de base :

Les valeurs de base autres que 8, 10 ou 16 réinitialisent basefield à zéro, ce qui correspond à une sortie décimale et une entrée dépendante du préfixe.

Table des matières

Paramètres

base - nouvelle valeur pour basefield

Valeur de retour

Un objet de type non spécifié tel que

  • si out est un objet de type std:: basic_ostream < CharT, Traits > , l'expression out << setbase ( base )
    • a pour type std:: basic_ostream < CharT, Traits > &
    • a pour valeur out
    • se comporte comme si elle appelait f ( out, base )
  • si in est un objet de type std:: basic_istream < CharT, Traits > , l'expression in >> setbase ( base )
    • a pour type std:: basic_istream < CharT, Traits > &
    • a pour valeur in
    • se comporte comme si elle appelait f ( in, base )

où la fonction f est définie comme :

void f(std::ios_base& str, int base)
{
    // définir le champ de base
    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);
}

Exemple

#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';
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 183 C++98 setbase ne pouvait être utilisé qu'avec des flux
de type std::ostream ou std::istream
utilisable avec tout
flux de caractères

Voir aussi

modifie la base utilisée pour les E/S d'entiers
(fonction)
contrôle si le préfixe est utilisé pour indiquer la base numérique
(fonction)