2008-09-16 7 views
3

Kann ich den Operator >> in C++ überzeugen, sowohl einen Hexadezimalwert als auch einen Dezimalwert zu lesen? Das folgende Programm zeigt, wie das Lesen von Hex falsch geht. Ich möchte, dass derselbe istringstream sowohl hexadezimal als auch dezimal lesen kann.Kann Operator >> ein int hex UND dezimal lesen?

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

Antwort

9

Verwenden Sie std::setbase(0), die das Präfix-abhängige Parsing ermöglicht. Es wird in der Lage sein, 10 (Dez) als 10 Dezimal, 0x10 (Hex) als 16 Dezimal und 010 (Oktal) als 8 Dezimal zu analysieren.

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

Sie müssen C++ sagen, was Ihre Basis sein wird.

Möchten Sie eine Hexadezimalzahl parsen? Ändern Sie Ihre „ist >> Ergebnis“ -Zeile:

is >> std::hex >> result; 

Einlochen std :: Dezember Dezimalzahlen zeigt, std :: Oktober zeigt an Oktal.

-2

0x ist ein C/C++ spezifisches Präfix. Eine Hexadezimalzahl ist nur Ziffern wie eine Dezimalzahl. Sie müssen prüfen, ob diese Zeichen vorhanden sind, und dann entsprechend analysieren.

+0

siehe Antwort von @ user10392. Sie müssen dies nicht manuell tun. –

Verwandte Themen