Hex in Dec in C++

keller64283

Grünschnabel
Ich habe folgenden Code der auch funktioniert und suche nun eine Möglichkeit auch
hex-Zahlendie größer als f sind umzurechnen::nospam:

#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main()
{

int a;
char i;
cout << "Eingabe: ";
cin >> i;

switch(i) {
case '1' : a=1; break;
case '2' : a=2; break;
case '3' : a=3; break;
case '4' : a=4; break;
case '5' : a=5; break;
case '6' : a=6; break;
case '7' : a=7; break;
case '8' : a=8; break;
case '9' : a=9; break;
case 'a' : a=10; break;
case 'b' : a=11; break;
case 'c' : a=12; break;
case 'd' : a=13; break;
case 'e' : a=14; break;
case 'f' : a=15; break;
default : i=0;
}
if (i > f, a > 15)
{

cout<< "hex: " << i << " dec: " << a <<endl;


}
 
Wie wärs einfach so:

C++:
#include <iostream>

int main() {
     std::cout << std::hex << 15 << std::endl;
     std::cout << std::dec << 0xFF << std::endl;
     std::cin.ignore();

     return 0;
}
 
Ich denke, keller64283 geht es eher darum, einen Eingabestring zu vearbeiten:
C++:
int a;
std::cin >> std::hex >> a;

std::cout << "DEC: " << a << std::endl
          << "HEX: " << std::hex << a << std::endl;
Gruß
MCoder
 
Danke für den Tip es geht leider nicht so ganz.
Ich poste den quelltext:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main()
{
char f;
int a;
char i();
cout << "Eingabe: ";

std::cin >> std::hex >> a;
switch(i) {
case '1' : a=1; break;
case '2' : a=2; break;
case '3' : a=3; break;
case '4' : a=4; break;
case '5' : a=5; break;
case '6' : a=6; break;
case '7' : a=7; break;
case '8' : a=8; break;
case '9' : a=9; break;
case 'a' : a=10; break;
case 'b' : a=11; break;
case 'c' : a=12; break;
case 'd' : a=13; break;
case 'e' : a=14; break;
case 'f' : a=15; break;
default : i=0;
}
if ( a > 15)
{
std::cout << "DEC: " << a << std::endl
<< "HEX: " << std::hex << a << std::endl;


}
}
Vielleicht fällt noch jemanden etwas ein. Die Switch-case Geschichte muß bleiben. Danke.
 
Zuletzt bearbeitet:
Vielleicht fällt noch jemanden etwas ein. Die Switch-case Geschichte muß bleiben.
Na wenn du dir den Aufwand machen willst :-)

Dann packe die eigentliche Konvertierung (den switch-case-Block) am besten in eine eigene Funktion. Beim Einlesen (cin) nimmst du dann entweder ein char-Array oder die string-Klasse. Dann musst du in einer Schleife jedes eingelesene Zeichen mit der Konvertierungsfunktion umwandeln und entsprechend seiner Position mit 10, 100, 1000 usw. multiplizieren.

Gruß
MCoder
 
Muggefronc: Wenn man die Qualität deines Beitrages bewerten sollte: 5- (in Schulnote).
- Es handelt sich hierbei um eine C-Lösung (es sei denn du hast irgendwo folgendes stehen:
C++:
#include <cstring>
#include <cstdio>

using std::atoi;
using std::sprintf;
aber davon kannst du nicht ausgehen, es sei denn du erwähnst dies.

- Es wurde bereits eine wesentlich elegantere und C++ eher entsprechende Lösung gepostet (vgl. engelmarkus, mcoder).
- Er hat explizit danach darauf hingewiesen das er es per switch-cast lösen will/muss, dann wird es wohl so sein!

Zum Problem: Solltest hier mitm Euklidischen Restalgorithmus (statt wie normal mit 2 jetzt mit 16) auskommen. Dann das ergebnis dieses immer durch deine switch-case-Konstruktion jagen und gut ist ;)
 
ich glaub es geht hier nicht darum, beiträge zu bewerten. :confused:
will ja keinem was böses, wenn ich meine idee poste. dass man auf die include selbst kommt hatte ich halt vorrausgesetzt.
 
Vielen dank allen und seit wieder gut miteinander.
Es hat mir schon sehr geholfen.
Ich bekomme nun den Switch und auch die Berechnung leider noch nicht ganz flüssig. ich poste alles noch einmal. wo liegt der Fehler?
Code:
#include <iostream>
#include <conio.h>
#include <string>
#include <cstring>
#include <cstdio>
 
using std::atoi;
using std::sprintf;
using namespace std;
int main()
{
char f();
int a;
 char i;
 cout << "Eingabe: ";

cin >> i;

if ( i>0)
{
switch (i) 
{
case '1' : a=1; break;
case '2' : a=2; break;
case '3' : a=3; break;
case '4' : a=4; break;
case '5' : a=5; break;
case '6' : a=6; break;
case '7' : a=7; break;
case '8' : a=8; break;
case '9' : a=9; break;
case 'a' : a=10; break;
case 'b' : a=11; break;
case 'c' : a=12; break;
case 'd' : a=13; break;
case 'e' : a=14; break;
case 'f' : a=15; break;
default : i = 0;
}
cout << a<<endl;
}
if ( std::cin >> std::hex >> a);
{
std::cout << "DEC: " << a << std::endl
          << "HEX: " << std::hex << a << std::endl;
}
cout << a;
}
 
Tja Copy&Past is ja auch nicht das was du machen sollst. Das was du da stehen hast lässt zu 100% darauf schließen, dass du keine Ahnung hast, was du da machst.

C++:
#include <iostream>
#include <string>

int main()
{
    std::cout << "Eingabe (Hexadezimal): ";
    std::string input;
    std::cin >> input;

    {
        unsigned long result(0);
        unsigned char digit(0);
        for (std::string::iterator it(input.begin()); it != input.end(); ++it)
        {
            switch (*it) 
            {
                case '1': digit = 1; break;
                case '2': digit = 2; break;
                case '3': digit = 3; break;
                case '4': digit = 4; break;
                case '5': digit = 5; break;
                case '6': digit = 6; break;
                case '7': digit = 7; break;
                case '8': digit = 8; break;
                case '9': digit = 9; break;
                case 'a': digit = 10; break;
                case 'b': digit = 11; break;
                case 'c': digit = 12; break;
                case 'd': digit = 13; break;
                case 'e': digit = 14; break;
                case 'f': digit = 15; break;
            }
            if (digit == 0) { std::cerr << "ERROR: Invalid input!"; return 1; }
            result  = result * 16 + digit;
        }
        std::cout << "Ausgabe (Dezimal): " << result;
    }
    std::cin.ignore();
}
Damit sind deine Hausaufgaben erledigt. Last Time ;)
 
Zurück