Binärzahlen (Dualzahlen) in dezimale Zahlen umwandeln



  • Hallo!

    Ich habe ein kleines Problem. Mein Programm kann Dezimalzahlen in Binär-, Oktal- und hexadezimale Zahlen umwandeln.

    Nur wenn ich jetzt die Basis 10 nutze um beispielsweise eine Binärzahl in eine Dezimalzahl umzuwandeln funktioniert das nicht. 😞
    Kann mir jemand helfen?

    void __fastcall TForm_DinO::Button_umwandelnClick(TObject *Sender)
    {
     char* Alphabet="01234567";         // Zahlenbereich, der genutzt werden soll
     int basis=8;                      // Basis = Teiler
    
     int Dezimal=Edit_Dezimal->Text.ToIntDef(-1);   // Eingabe
     AnsiString Ergebnis;
    
     if(Dezimal<0)
      {
       Edit_Oktal->Text="Fehler, nur positive ganze zahlen erlaubt";
      }
    
      if(Dezimal==0)
        Ergebnis="0";
       else
        while(Dezimal>0)
         {
          Ergebnis=AnsiString(char(Alphabet[Dezimal % basis])) + Ergebnis;       //Rechnung
          Dezimal /=basis;
         }
    
         Edit_Oktal->Text=Ergebnis;                 // Ausgabe
    }
    

    Vielen Dank (schon im Voraus) für eure Ratschläge 🙂



  • Hallo

    "Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung!
    Benutzt den Debugger und verfolge den Ablauf deines Programmes und die Werte der wichtigen Variablen.

    bis bald
    akari



  • [Dezimal % basis] kann die Werte 0-9 haben,
    das Array Alphabet ist aber nur 8 groß.

    Ich würde also auf eine Zugriffsverletzung tippen...



  • Also programm ist fehlerfrei!

    In dem beispiel, was ich gegeben habe werden nur Dezimalzahlen in Oktalzahlen umgewandelt. Ändere ich das Alphabet und die dazugehörige Basis kann ich eine dezimale Zahl auch in jede andere beliebige Zahl umwandeln.

    Nun möchte ich doch nur wissen, wie ich das ganze umgekehrt machen kann, in dem ich nur die basis und das alphabet ändere oder funktioniert das nicht?

    Liebe Grüße, fire



  • Basis- und Alphabetveränderungen allein helfen dir nicht. Du mußt den Algorithmus umkehren.



  • Du lieferst dir die Antwort auf "oder funktioniert das nicht?" doch eigentlich schon selbst... wenn du die Basis auf 10 änderst, "wandelst" du Dezimalzahlen in Dezimalzahlen um.



  • Nanyuki schrieb:

    ... wenn du die Basis auf 10 änderst, "wandelst" du Dezimalzahlen in Dezimalzahlen um.

    Eben nicht, wenn es so wäre, würde ich nicht fragen. Ich muss in dem Qulltext selbst auch etwas ändern aber ich weiß nicht was... 😞
    ich habe doch keine weitere ahnung im programmieren. Weißt du nicht was ich daran änder muss?



  • int zahl = strtol(Edit_Dezimal->Text.c_str(),NULL,2);
    

    greetz KN4CK3R



  • hallo KN4CK3R,

    danke, dass mir endlich mal einer nen hinweis gibt. und wo muss ich das genau einfügen?
    das ist doch die eingabe für die binärzahl, nicht wahr? also ändere ich das alphabet noch und die basis auf 10.
    da kommt als ergebnis immer 0 raus. 😕 gib mir bitte noch etwas mehr hilfe.

    fire



  • ach ist schon ok, habs verstanden!

    dank euch allen für eure hilfe



  • Aber jetzt habe ich noch ein Problem, in dem ihr mir vielleicht auch helfen könntet. Wie kann ich jetzt hexadezimale und oktale Zahlen in eine Dezimalzahl umwandeln?

    gibt es dafür auch so einen eingabebefehl wie diesen, aber eben für hexadezimale und oktale Zahlen?

    KN4CK3R schrieb:

    int zahl = strtol(Edit_Dezimal->Text.c_str(),NULL,2);
    

    es wäre klasse, wenn ihr mir den auch verraten würdet.

    liebe grüße, fire



  • Hex -> Int

    int zahl = strtol(Edit_Dezimal->Text.c_str(),NULL,16);
    

    Int -> Hex

    String Hexzahl = IntToHex(ZAHL,STELLEN);
    

    Oktal zu Dezimal kann ich dir leider nicht sagen.

    greetz KN4CK3R



  • danke, ist ok! du glaubst gar nicht wie ich jetzt erleichtert bin, dass du mir geholfen hast.

    liebe grüße, fire



  • aber ich hab dann doch noch mal eine frage zu

    Int -> Hex

    String Hexzahl = IntToHex(ZAHL,STELLEN);
    

    ist das die ein- oder ausgabe? ich weiß nicht genau wo ich das unterbringen soll. ich hoffe das sagst du mir auch noch 🙂
    cu, fire



  • steht doch da: Int wird zu Hex umgewandelt, also die Ausgabe.

    greetz KN4CK3R



  • mmh... stimmt, und was ist mit "ZAHL,STELLEN" gemeint? stellen ist die anzahl der stellen, die eine zahl besitzt, oder?



  • fire schrieb:

    mmh... stimmt, und was ist mit "ZAHL,STELLEN" gemeint? stellen ist die anzahl der stellen, die eine zahl besitzt, oder?

    warum probierst du es denn nicht einfach aus? ZAHL ist die Zahl, die du in Hex umwandeln willst und bei STELLEN kommt eine Zahl hin, wieviele Stellen das Ergebnis haben soll.

    greetz KN4CK3R


Anmelden zum Antworten