2008-09-16 9 views
3

Puis-je persuader l'opérateur >> en C++ de lire à la fois une valeur hexadécimale ET et une valeur décimale? Le programme suivant montre comment la lecture d'un hex se passe mal. Je voudrais que le même flux soit capable de lire à la fois hex et décimal.Est-ce que l'opérateur peut lire un int hex ET décimal?

#include <iostream> 
#include <sstream> 

int main(int argc, char** argv) 
{ 
    int result = 0; 
    // std::istringstream is("5"); // this works 
    std::istringstream is("0x5"); // this fails 

    while (is.good()) { 
     if (is.peek() != EOF) 
      is >> result; 
     else 
      break; 
    } 

    if (is.fail()) 
     std::cout << "failed to read string" << std::endl; 
    else 
     std::cout << "successfully read string" << std::endl; 

    std::cout << "result: " << result << std::endl; 
} 

Répondre

9

Utilisez std::setbase(0) qui permet l'analyse dépendante du préfixe. Il sera capable d'analyser 10 (dec) comme 10 décimal, 0x10 (hex) comme 16 décimal et 010 (octal) comme 8 décimal.

#include <iomanip> 
is >> std::setbase(0) >> result; 
12

Vous devez indiquer à C++ quelle sera votre base.

Vous voulez analyser un nombre hexadécimal? Changer votre "est >> résultat" ligne:

is >> std::hex >> result; 

Mettre un std :: décembre indique les nombres décimaux, std :: indique octal octobre.

-2

0x est le préfixe spécifique C/C++. Un nombre hexadécimal est juste des chiffres comme un nombre décimal. Vous devrez vérifier la présence de ces caractères, puis analyser correctement.

+0

Voir la réponse de @ user10392. Vous n'avez pas à le faire manuellement. –

Questions connexes