News... | Hack-Acad | Downloads | Web-Projekte | Kontakt
HACKACAD - Num-Converter (Code)

 
 /*++++++++++++++++++++++++++++++++++++++++++++*/
 /* Kurzes Konsolen Program zur Umrechnung von */
 /* und zwischen Dezimal, Binaer und Hexa-     */
 /* dezimal Werten.                            */
 /*++++++++++++++++++++++++++++++++++++++++++++*/

 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <math.h>

 /* Funktionsprototypen */

 void getMyDec();                    // Eingabe eines INT Wertes
 void getDEC(int myDec, int base);   // Wandelt INT in BIN oder HEX
 void getMyBin();                    // Eingabe eines BIN Wertes
 void getMyHex();                    // Eingabe eines HEX Wertes

 int main(int argc, char *argv[])
 {
    char cEnd = 'n';                 // Char Wert fuer Abrruch Bedingung

    do
    {
        system("CLS");               // Clear Screen

        printf("NumConverter - Menu\r\n");
        printf("-------------------\r\n");
        printf("1 = DEC -> BIN / HEX\r\n");
        printf("2 = BIN -> DEC / HEX\r\n");
        printf("3 = HEX -> DEC / BIN\r\n");
        printf("x = eXit\r\n");
        printf("\r\nDeine Auswahl: ");

        scanf("%c",&cEnd);            // Einlesen eines Chars
        fflush(stdin);                // Eingabepuffer leeren

        switch(cEnd)
        {
        case '1':
            getMyDec();
            break;
        case '2':
            getMyBin();
            break;
        case '3':
            getMyHex();
            break;
        }

    }
    while (cEnd != 'x');

    return 1;
 }

 void getMyDec()
 {
    int myDec;

    system("CLS");
    printf("\r\nGebe einen ganzahligen Wert ein: ");

    scanf("%i",&myDec);              // Einlesen eines Integers
    fflush(stdin);

    getDEC(myDec, 2);                // Uebergabe eines INTs mit neuer Basis
    getDEC(myDec, 16);               // Uebergabe eines INTs mit neuer Basis
    system("PAUSE");                 // Warten auf eine Tastureingabe...
 }

 void getDEC(int myDec, int base)
 {
    int  S, R;
    char szNumber[255], szTmp[255], pos[2];

    if (myDec > 0)                // Wenn INT groesser als 0
    {
        szTmp[0]	= '\0';
        pos[1]		= '\0';
        szNumber[0] = '\0';

        while (myDec > 0)
        {
            strcpy(szTmp,szNumber);
            S = (int)(myDec/base);
            R = myDec - S * base;

            if ( R > 9)            // Unterscheidung ob 0 - 9 oder A - F
                pos[0] = 55 + (int) R;
            else
                pos[0] = 48 + (int) R;

            strcpy(szNumber, pos);
            strcat(szNumber, szTmp);
            myDec = S;
        }

        if (base == 2)                // Ausgabe aufgrund von Basis BIN oder HEX
            printf("BIN = %s\r\n",szNumber);
        else if (base == 16)
            printf("HEX = %s\r\n",szNumber);
    }
    else
    printf ("\r\nDEC = BIN = 0 HEX = 0\r\n");
 }

 void getMyBin()
 {
    int i=0,j = 0,k = 0, myDec = 0,tmpPow;
    char szBin[255];
    szBin[0] = '\0';

    system("CLS");

    printf("Gebe einen BIN Wert ein: ");
    scanf("%s",szBin);                // Eingabe eines "Strings"
    fflush(stdin);

    // Pruefen ob nur 0 oder 1 eingegeben wurde
    for (i = 0; i< (int)strlen(szBin); i++)
    {
        if(szBin[i] != '0' && szBin[i] != '1')
        k = 1;
    }

    if (k==0)
    {
        // Ascii to Int()
        if (atoi(szBin)>=1)
        {
            j = strlen(szBin);

            for(i = 0; i < j; i++)
            {
                tmpPow = j-i-1;

                // Ist aktuelle Position 1 dann Dezimal hochrechnen
                if(szBin[i]=='1')
                    myDec = myDec + (int)(pow(2,tmpPow));
            }
            printf("DEC = %i\r\n",myDec);
            getDEC(myDec, 16);
        }
        else
            printf ("DEC = 0\r\nHEX = 0\r\n");
    }
    else
        printf ("Falsche Eingabe.\r\n");

    system("PAUSE");
 }

 void getMyHex()
 {
    int i=0,j = 0,k = 0, myDec = 0, tmpPow;
    char szHex[255];
    szHex[0] = '\0';

    system("CLS");

    printf("Gebe einen HEX Wert ein: ");
    scanf("%s",szHex);
    fflush(stdin);

    strupr(szHex);            // String to Upper() - macht Grossbuchstaben

    for (i = 0; i < (int)strlen(szHex); i++)
    {
        j = (int)(szHex[i]);
        if(j < 48 || j > 70)
        {
            printf("Kein gueltiger HEX Wert !!!\r\n");
            i = (int)strlen(szHex);
            k = 1;
        }
    }

    if (k==0)
    {
            j = strlen(szHex);

            for(i = 0; i < j; i++)
            {
                tmpPow = j-i-1;
                if((int)szHex[i]>=65 && (int)szHex[i]<=70)
                    k = ((int)(szHex[i]))-55;
                else
                    k = ((int)(szHex[i]))-48;

                myDec = myDec + (k*(int)(pow(16,tmpPow)));
            }
            printf("DEC = %i\r\n",myDec);
            getDEC(myDec,2);
    }

    system("PAUSE");
 }