Hex durch Cin erhalten

7

Warum funktioniert dieser Code nicht?

%Vor%

Mit der Eingabe von 0x1a erhalte ich x == 0 und nicht 26 .

Warum ist das so?

    
Quaker 02.11.2012, 13:51
quelle

5 Antworten

21

Ich glaube, um hex zu verwenden, musst du so etwas tun:

%Vor%

Sie können hex auch durch dec und oct etc ersetzen.

    
sean 02.11.2012, 13:54
quelle
7

Tatsächlich können Sie den Operator >> erzwingen, die Präfixe 0 und 0x zu erhalten und richtig zu interpretieren. Sie müssen lediglich die Standardeinstellungen für std::cin entfernen:

%Vor%

Wenn Sie jetzt 0x1a eingeben, erhalten Sie 26.

    
Karol D 11.12.2016 16:51
quelle
3

Denken Sie an << und >> , wenn Sie std::cout/std::cin so verwenden:

std::cout << x bedeutet, dass der Wert von x

abgerufen wird

std::cin >> x bedeutet, dass der Wert in x

gesetzt wird

Beachten Sie die Richtungen, in die die Operatoren zeigen. Das sollte Ihnen einen Hinweis geben, was sie tun, wenn Sie diese Funktionen verwenden.

Der Grund, dass Sie 0 und nicht 26 erhalten, liegt daran, dass std::cin alle nicht numerischen Zeichen von Ihrer Eingabe analysiert. Immerhin ist x ein int, es erkennt 0x nicht als Teil einer hexadezimalen Zahl. Es hätte das gleiche Verhalten, wenn die Eingabe 9x2 wäre (das Ergebnis wäre einfach 9 ).

    
0x499602D2 02.11.2012 13:55
quelle
1

Ihr Code sollte lauten:

%Vor%

Standardmäßig erwartet cin eine eingelesene Zahl als Dezimalzahl. Offensichtlich ist 0x1a keine gültige Dezimalzahl und die Konvertierung kann nicht stattfinden. Um es zum Laufen zu bringen, müssen wir den Stream-Modifikator hex verwenden, der cin dazu auffordert, die Zahlenumwandlung von hexadezimal statt dezimal zu erwarten.

Das Präfix 0x ist in diesem Fall optional, daher würde die Eingabe 10 gelesen und als Dezimalzahl 16 gespeichert.

    
Component 10 02.11.2012 13:55
quelle
1
%Vor%     
AlbertFG 19.09.2015 19:00
quelle

Tags und Links