Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

vab

Frischling

  • »vab« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Hamburg

Beruf: Kfz-Meister

  • Private Nachricht senden

1

02.09.2015, 14:06

Fehler bei Hex nach Dez

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Hallo zusammen,
wer kann mir weiterhelfen, bei der Umwandlung von HEX nach DEZ läuft alles richtig, bis bei Hex eine "0" in der Zahlenreihe auftaucht, dann kommen Fehler in der Umwandlung, die Null wird als 17 gerechnet, was aber eine 16 sein soll. 
Wo liegt der Fehler?
Wie kann ich diesen beheben?
Danke für die Antwort.

PS. Gehe nicht mehr zur Schule ist nur Hobby für mich!!


#include <iostream>
#include <string>
#include<conio.h>       

using namespace std;

int main()
{
    string eingabe;
    
    cout << " \n\n\n\n\t\t      H E X A D E Z I M A L   N A C H   D E Z I M A L " << endl;
    cout << " \n\t\t      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " << endl;
    
    cout << " \n\n\t\t\t ***  Hex. nicht Größer als 8 Ziffer !  *** ";
    cout << " \n\n\n\n\t\t      Bitte Eingabe der (Hexadezimal-Zahl)  :  ";
    cin >> eingabe;

    {
        unsigned long ergebnis(0);
        unsigned char dez(0);

        for (string::iterator i(eingabe.begin()); i != eingabe.end(); ++i)
        {
            switch (*i)
            {
            case '1': dez = 1; break;
            case '2': dez = 2; break;
            case '3': dez = 3; break;
            case '4': dez = 4; break;
            case '5': dez = 5; break;
            case '6': dez = 6; break;
            case '7': dez = 7; break;
            case '8': dez = 8; break;
            case '9': dez = 9; break;
            case 'a': dez = 10; break;
            case 'b': dez = 11; break;
            case 'c': dez = 12; break;
            case 'd': dez = 13; break;
            case 'e': dez = 14; break;
            case 'f': dez = 15; break;
            }
            ergebnis = ergebnis * 16 + dez;
        }
        cout << " \n\n\n\t\t Eingabe (Hexadezimal)  : " << eingabe << "     Ausgabe (Dezimal)  : " << ergebnis << " \n\n\n " << endl;
    }
}

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

02.09.2015, 14:11

Du behandelst den Fall '0' ja auch gar nicht in deinem switch. Somit wird, wenn es eine 0 gibt, einfach der Wert der Ziffer vorher verwendet.
Aktuell ist eine 0 bei dir also einfach ein "nimm die letzte Ziffer noch mal"

Das gleiche passiert übrigens auch, wenn jemand einen ungültigen Wert eingibt, zb "123z"

3

02.09.2015, 15:00

C++ bietet dafür auch Stream-Manipulatoren, wenn ich das mal einwerfen darf. :)

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

02.09.2015, 15:04

std::stringstream sstream;
sstream << std::hex << "2f50d";
int hex;
sstream >> hex;
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige