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 zu scanf() geschaut?
    Oder wie liest Du ein? Und wenn Du nicht mit scanf() 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.


Anmelden zum Antworten