/*++++++++++++++++++++++++++++++++++++++++++++*/
/* 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");
}