Bei Verwendung von scanf() und seinen Varianten akzeptiert der Formatspezifizierer %i
Daten als hexadezimale (Präfix "0x"), oktale (Präfix "0") oder Dezimalzahl (kein Präfix), also beispielsweise die Strings "0x10" "020" und "16" werden alle in eine ganze Zahl mit Dezimalwert 16 konvertiert.Kann `std :: istreamream :: operator >>()` ganzzahlige Radix-Präfixe wie stdios% i Formatspezifizierer akzeptieren?
Kann dies mit std::istream::operator>>
formatiertem Eingang geschehen?
mit Normalpapier >> i
ohne I/O-Manipulator „0x10“ auf Null umgewandelt wird (oder eher die führenden 0 ist, wird das „x10“ -Teil nicht verarbeitet), und „020“ bis 20. Die hex
, oct
und dec
Manipulatoren verhalten sich wie %x
, %o
bzw. %d
. Ich suche nach einem allgemeinen Ganzzahleingabe-Manipulator, der wie %i
funktioniert.
Interessanterweise akzeptiert der hex
Manipulator sowohl "0x10" als auch "10", um entweder auf 16 Dezimalstellen umzurechnen.
Für den Fall, dass Sie sich wundern, ich bin ein Ausdruck Evaluator implementieren, und ich möchte, dass Integer Operanden Hex, Oktal oder Dezimal mit der C/C++ Präfix Konvention. Die aktuelle Implementierung, die sscanf()
verwendet, tut dies automatisch mit %i
, und ich bin neugierig, ob dies geändert werden könnte, um Iostream zu verwenden, ohne das numerische Format explizit analysieren zu müssen.
Interessante E. +1. Ich frage mich, ob das Buch C++ IOStreams und Locales solche Sachen hat ... –
Da ich mir fast 100% sicher bin, dass es kein direktes Äquivalent gibt, glaube ich, dass die neuste und am besten inhaltende Lösung darin besteht, einen neuen Manipulator der Form zu implementieren 'std :: ios_base & integer (std :: ios_base & str);' – Clifford
@Johannes hat die Antwort, die auch die Mittel zur Implementierung des obigen Manipulators bietet. – Clifford