Hexwertumwandlung
-
Moin!
Ich möchte gerne einen Hexwert in eine Dezimalzahl umwandeln.Bei meiner Googlesuche habe ich dabei verschiedene Ansätze gefunden.
Z.B. mit atoi und einfaches casten.
Da ich jedoch nicht weis was da nun der beste Weg ist habe ich mich entschieden euch zu fragen.In meinem gegenwärtigem Programm frage ich einen (Hex)wert ab (per 4-stelligem String). Diesen möchte ich nun in eine Dezimalzahl umwandeln um damit einen Wert an dieser Position in ein anderes Array zu speichern.
Ich glaube, dass einfaches casten da ja nicht klappen wird. Oder?
Beispiel:
Eingabe Wert
000E
Umwandlung in Dezimalwert
14
Speichern eines Wertes in ein anderes Array an diser Position
Array[14] = "Test!"
-
Aha.
Hast Du schon in in die Dokumentation zuscanf()
geschaut?
Oder wie liest Du ein? Und wenn Du nicht mitscanf()
einliest: warum?#include <stdio.h> int main(void){ unsigned int i; scanf("%x", &i); printf("i: %d\n", i); }
Wie Du siehst: da ist auch nix umzuwandeln: i ist eine Zahl. hex und dezimal sind nur verschiedene Darstellungen.
-
Entschuldige bitte meine sehr späte Antwort.
Aus krankheitsbedingten Gründen war es mir jedoch nicht möglich früher zu antworten.Mit diesem Code lese ich ein:
system("cls"); //löscht den bisherigen Fensterinhalt char startadr[4]; printf("Startadresse? "); scanf("%c%c%c%c", &startadr[0], &startadr[1], &startadr[2], &startadr[3], &startadr[4]); printf("%c%c%c%c\n ", startadr[0], startadr[1], startadr[2], startadr[3], startadr[4]);
Schön, dass ich nicht umwandeln muss.
Deine Antwort löst mein Einleseproblem.Allerdings möchte ich den Hexwert später wieder als Dezimalwert und danach wieder als Hexwert anzeigen lassen.
Daher bräuchte ich eine Möglichkeit um den Wert unabhängig von scanf in der Darstellung umzuwandeln.
-
Dezimal und Hexadezimal sind Darstellungsformen für den Menschen.
Der Computer speichert die Werte intern anders ab. Das spielt aber keine Rolle.
Bei der Antwort von Furble Wurble wird der Wert in i gespeichert.
Bei der Ausgabe kannst du dann mit dem Formatspecifier bestimmen, wie der Wert angezeigt werden soll.
printf("Dez: %d | Hex: %x | Oktal: %o\n", i, i, i);
Zu deinem Code:
%c ist zum Einlesen von Zeichen da. Und das Zeichen für '1' hat nicht den Wert 1, ist also etwas anderes.
Eine gebräuliche Codierung für Zeichen ist ASCII. Da hat z.B. das Zeichen für '1' den Wert 49 bzw 0x31
Es wird mit der Methode etwas schwierig mit dem rechnen.
-
Wie der Computer Daten abspeichert ist mir bewusst.
Ich kannte lediglich nicht die Möglichkeiten um die Werte anders anzeigen zu lassen.
Jetzt kenne ich sie ja. Danke.
Bisher wusste ich nur, dass ich Integerwerte mit %d, Floatwerte mit %f usw. anzeigen lassen kann.Meine Einlesemethode werde ich noch in integer umwandeln.
Da ich jetzt weis wie ich mit den Hexwerten arbeiten kann.