Zum Inhalt springen

Hex in Dezimalzahl umwandeln, wer kann helfen??


Empfohlene Beiträge

Geschrieben

Hallo an alle

habe nachfolgendes programm geschrieben.

macht aus Hexzahlen Dezimalzahlen

Allerdings klapp es nur wenn ich eine genau achtstellige Hexadezimalzahleingebe

Er meckert also, wenn ich z.B. nur FF77 eingebe.

Anderherum kann ich mehr stellen eingeben, z.B. 12, dann schneidet er ohne zu meckern sie letzten 4 ab.

wer kann mir einen einlösungsansatz geben??

Gruß´

:marine :marine

#include<stdio.h>

#include<math.h>

void main()

{

char hex[9];

int hexrichtig;

int index=7;

int summe=0;

int dezimal=0;

int exponent=0;

char antwort='j';

while(antwort=='j')

{

printf("\n\n\n Zur Umrechnung in Dezimal bitte eine achtstellige Hexaldezimalzahl eingeben\n");

printf("\n\tZur Eingabe koennen die Zeichen a-f, A-F und 0-9verwendet werden\n\n\t\t\t");

scanf("%s",&hex);

while(index>=0)

{

if((hex[index]>='A')&&(hex[index]<='F'))

{

dezimal=hex[index]-'A'+10;

summe+=pow(16,exponent)*dezimal;

++exponent;

--index;

}

else if((hex[index]>='a')&&(hex[index]<='f'))

{

dezimal=hex[index]-'a'+10;

summe+=pow(16,exponent)*dezimal;

++exponent;

--index;

}

else if((hex[index]>='0')&&(hex[index]<='9'))

{

dezimal=hex[index]-'0';

summe+=pow(16,exponent)*dezimal;

++exponent;

--index;

}

else

{

summe=-1;

break;

}

}

if(summe<=-2)

{

printf("Es gab eine Bereichsueberschreitung\a\a\n");

}

else if (summe==-1)

{

printf(" \n\n\t\tDie eingegebene Zahl ist nicht korrekt\a\n");

printf(" \t\tDie Zahl muss achtstellig sein");

}

else

{

printf("\n\n\tDie Umrechung in eine Dezimalzahl brachte folgendes Ergebnis\n");

printf("\n\t\t\t%i\n",summe);

printf("\t\t --------");

}

printf("\n\n\tnoch eine Berechnung gefaellig?????j/n");

scanf("%s",&antwort);

index=7;

exponent=0;

summe=0;

}

}

Geschrieben

es dürfte wohl daran liegen, dass du immer alle acht stellen durchgehst,

auch wenn diese nicht alle eingegeben wurden, dann steht an der entsprechenden stelle kein verwendbarer wert...

edit: zu langsam :(

Geschrieben

Hallo,

Nur so am Rande: Du kannst dafuer auch die Funktion "strtol" verwenden. Die Minimalloesung saehe in etwa wie folgt aus:


int main(int argc, char **argv)

{

  printf("0x%s = %d dezimal\n", argv[1], strtol(argv[1],(char *)0,16));

}

Nic

Geschrieben
Original geschrieben von Klotzkopp

Das Problem ist, dass Du davon ausgehst, dass index für die erste eingegebene Ziffer 7 ist. Das ist nur bei achtstelligen Zahlen der Fall.

Abhilfe: Nach der Eingabe index auf strlen(hex)-1 setzen.

ich versuche mal zu folgen

ich habe jetzt folgendes gemacht

die Hex wird von rechts nach links überprüft, also von hex[7](16^0) bis hex[0](16^7).

wenn ich nun ff eingebe, werden die zwei zeichen auf hex[0] und hex[1] abgelegt, folglich keine Eingabe in hex(2-7)!!!

Kann ich mit strlen(hex)-1 überprüfen das in der Vektorvariablen Hex[2-7] keine eingabe erfolgt ist.

Ich möchte eine Überprüfung einbauen, bei der festgestellt wird ob auf der jeweiligen Vektorvariablen eine eingabe erfolgt ist.

Gruß:marine :marine

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...