Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Char Problemm (verkettung)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.12.2003, 10:27 Uhr
~MaJu
Gast


Ich möchte von einer Decimal-Zahl in Hexadzimal umwandeln. Ansich rechnet erdas ja auch alles richtig so wie er das machen soll, aller dings wenn erdann die zahle übersetzt in Zeichen, giebt er mir immer nur ein einzges zeichen zurück.

zum bsseren verstehen hier quellcode: (VC++)


C++:
// Dies ist Funktion wenn der Button betätigt wird und
// dann in die eigentliche funktion verschwidet!

void main_class::OnTohex()
{
    UpdateData(TRUE);
    SetDlgItemText(IDC_OUT, umw.dtoh(25));
}



C++:
// Die function die fr alles verantwortlich ist:

char * umwandeln::dtoh(double dec) {
    strcpy(hex, "\0");
    do {
        laenge++;
        tmp2=new int[laenge];
        //hex=new char[laenge];
        do {
            for(tmp=1; tmp<=15; tmp++) {
                erg=tmp*exp; if(erg>dec) break;
            }
            if(erg<dec) exp*=16;
        } while(erg<dec);
        if(tmp==15) { dec-=1*(exp/16); tmp2[laenge]=1;
        } else { dec-=(tmp-1)*exp; tmp2[laenge]=tmp-1; }
        exp=1;
    } while(dec>0);
// Ab hier also in der Forschleife muss jetzt der hacken bei der sache liegen
// ich weis aber nicht warum er das nicht richtig verketten tut.
    strcpy(hex, "\0");
    for(tmp=0; tmp<=laenge; tmp++) {
        
            switch(tmp2[tmp]) {
            case 1:    strcat(hex, "1");    break;    case 9:        strcat(hex, "9");    break;
            case 2:    strcat(hex, "2");    break;    case 10:    strcat(hex, "A");    break;
            case 3:    strcat(hex, "3");    break;    case 11:    strcat(hex, "B");    break;
            case 4:    strcat(hex, "4");    break;    case 12:    strcat(hex, "C");    break;
            case 5:    strcat(hex, "5");    break;    case 13:    strcat(hex, "D");    break;
            case 6:    strcat(hex, "6");    break;    case 14:    strcat(hex, "E");    break;
            case 7:    strcat(hex, "7");    break;    case 15:    strcat(hex, "F");    break;
            case 8:    strcat(hex, "8");    break;    case 0:        strcat(hex, "0");    break;
            }
        /*
            switch(tmp2[tmp]) {
            case 1:    hex[tmp]='1';    break;    case 9:        hex[tmp]='9';    break;
            case 2:    hex[tmp]='2';    break;    case 10:    hex[tmp]='A';    break;
            case 3:    hex[tmp]='3';    break;    case 11:    hex[tmp]='B';    break;
            case 4:    hex[tmp]='4';    break;    case 12:    hex[tmp]='C';    break;
            case 5:    hex[tmp]='5';    break;    case 13:    hex[tmp]='D';    break;
            case 6:    hex[tmp]='6';    break;    case 14:    hex[tmp]='E';    break;
            case 7:    hex[tmp]='7';    break;    case 15:    hex[tmp]='F';    break;
            case 8:    hex[tmp]='8';    break;    case 0:        hex[tmp]='0';    break;
            }
            //hex[tmp+1]='\0';
            */

    }
    ofstream out;
    out.open("hex.txt", ios::out);
    out << hex << endl;
    out.close();
    return hex;
}



Die Headerdatei für die classe ist richtig initiert aber wenn es hilft hier der code:

C++:
class umwandeln {
private:
    int tmp, *tmp2, laenge;
    double dec, exp, erg;
    char hex[255];
public:
    umwandeln() { exp=laenge=1; };
    ~umwandeln();
    char * dtoh(double dec);
    double htod(char *hex);
protected:
};




Ich knauble immer noch seit 4 wochen dran rum hoffe das mir endlich mal jemand helfen kann!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.12.2003, 13:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Also ich muß sagen, daß ich nicht im geringsten Blicke, was Du da mchst. Ich glaube auch, daß Du Dich ein wenig verrant hast. Auf Anhieb fällt mich auch auf, daß Du das Speicherlöscher produzierst...

Zunächst mal mußt Du Dir darüber klar werden, weshalb Du ein double als parameter übergibst. soll es so daß, daß wenn Du du die Zahl "1.5" (dec) umwandelst, daß dann da "1.8"(hex) rauskommen soll? - Wenn Du jetzt sagst, daß die Zahl keine Nachkommastellen haben soll, dann frage ich mich, warum du überhaupt eine Fließkommazahl verwendest...

Wenn es nur eine Ganzzahl sein soll, dann wäre die erste Wahl ein long zu verwenden und die Zahl einfach mittels sprintf in einen Hexadezimalen String umzuwandeln:

C++:
char* dtoh(unsigned long dec)
{
    char* tmp = new char[sizeof(long)*2+1];
    sprintf(tmp, "%lx", dec);
    return tmp;
}


Der Aufrufer ist für die Freigabe verantwortlich.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: