Konvertieren von Dez zu Binär und Hex mit C!!



  • in Bezug auf meinen Quellcodeausschnitt ein verbesserungsvorschlag

    Wenn Du hinten anfaengst kannst Du auf pow() verzichten und einfach die Basis auf den Stellenwert (initial 1) multiplizieren.

    Da die Ascii-Darstellung der Hexadezimalziffern aufsteigend ist, koennte man die Ziffernumrechnung anstatt der if..else-Konstruktion zb per binaerer Suche loesen:

    char hex2dec(char c)
    {
      char *hexmap="0123456789ABCDEF";
      int l= 0;
      int r= 15;
      int m;
      while (l<r)
      {
        m= (l+r)>>1;
        if (c>hexmap[m])
          l=m+1;
        else
          r=m;
      }
      return l;
    }
    

    (setzt uppercase voraus)



  • Timauchmalloggedoff schrieb:

    itoa() ist kein Standard C.

    dann nimm strol, strtoul oder sowas. irgendwas davon ist 'ne standardfunktion.
    🙂



  • hellihjb schrieb:

    koennte man die Ziffernumrechnung anstatt der if..else-Konstruktion zb per binaerer Suche loesen:

    bist du informatiker oder sowas? ein 'if' ist doch nicht schlecht:

    char hex2dec(char c)
    {
      c = toupper(c) - '0';
      if (c <= 9)
        return c;  
      return c + '0' - 'A' + 10;
    }
    

    🙂



  • ~fricky schrieb:

    Timauchmalloggedoff schrieb:

    itoa() ist kein Standard C.

    dann nimm strol, strtoul oder sowas. irgendwas davon ist 'ne standardfunktion.
    🙂

    Ja, aber das wären Alternativen zu atoi, nicht itoa...



  • _matze schrieb:

    Ja, aber das wären Alternativen zu atoi, nicht itoa...

    ach, ich blindfisch! na, dann eben 'sprintf'.
    🙂



  • ~fricky schrieb:

    _matze schrieb:

    Ja, aber das wären Alternativen zu atoi, nicht itoa...

    ach, ich blindfisch! na, dann eben 'sprintf'.
    🙂

    Richtig, du Blindfisch! 😃 😉

    Und wie wandelt man nach binär um mit sprintf?



  • _matze schrieb:

    Richtig, du Blindfisch!

    ich muss zugeben, dass ich den thread nur stückchenweise gelesen habe.
    🙂



  • Ninja also bei meinem Code Beispiel war wie ich jetzt weiß diese Stelle Falsch (Denkfehler zu einfach gedacht):

    dez[i] = (merk * pow(basis, stellenwert));
    

    ich muss das Erg mit dem nächsten Addieren und dem nächsten dazu und so weiter... und dann das gesammtergebniss in dez[i] position für Postition packen...

    ansonsten der Vorgang die Rechnung bis dahin ist nicht falsch...

    gruß



  • noch ne Frage ... also es gibt ja isxdigit und so... damit überprüfe ich auf 0-9 A-F so nun soll bei HExa wenn ein G-Z eingegeben wurde ein Fehler kommen... gibt es sowas wie isnotxdigit oder so? ^^



  • Virokams schrieb:

    noch ne Frage ... also es gibt ja isxdigit und so... gibt es sowas wie isnotxdigit oder so? ^^

    lies deine frage mal selbst, dann weisst du gleich die antwort.
    🙂



  • ~fricky schrieb:

    Virokams schrieb:

    noch ne Frage ... also es gibt ja isxdigit und so... gibt es sowas wie isnotxdigit oder so? ^^

    lies deine frage mal selbst, dann weisst du gleich die antwort.
    🙂

    !isdigit als Beispiel? XD

    Ich hammel... sry


Anmelden zum Antworten