Anfanger Hex Dezimal

Gast #441099
Lesenswert?
• ▲
▼
Hexadezimal ist nur eine andere Darstellung der gleichen Zahl.

Man kann also höchstens die Darstellung als string verändern.
Dafür gibt es Formatierungs"-Befehle" für printf bzw. sprintf.
#441103
Lesenswert?
• ▲
▼
Die Frage ist: wozu?

Die Sache ist die: Im µC existiert kein Hex oder Dezimal.
Der µC kennt nur Bytes in denen irgendwelche Bits gesetzt
sind. Erst bei der Ausgabe oder Eingabe entscheidest du
ob die Ausgeb jetzt Dezimal oder Hex oder binär erfolgen soll.
Dito bei der Eingabe: Du legst fest, wie die Eingabe erfolgen
soll: in Hex oder Dezimal oder irgendwie ganz anders. Sofort
bei der Eingabe wird alles in die binäre Form gebracht. Ab
dort läuft im µC alles nur noch binär ab.
Man könnte also sagen: Dezimal, Hex oder Binär (oder eine ganz
andere Zahlenbasis) sind nur verschiedene Ansichten für immer
dasselbe: Eine Zahl, die in Form von gesetzten oder nicht
gesetzten Bits in einem Byte gespeichert ist.

Mit diesem Vorwissen:
itoa() ist zum Beispiel eine universelle Konvertierroutine,
die für einen 'Bithaufen' einen String generieren kann, der
genau diese Zahl in Textform in jedem gewünschten Zahlensystem
enthält.
Eine andere Möglichkeit, wenn man nicht mit Speicher geizen
muss, wäre zb. sprintf(). Da hat man dann auch noch zusätzliche
Möglichkeiten die Formatierung zu steuern.
Oder aber man schreibt sich selbst eine Konvertierroutine.

Aber allen gemeinsam ist: vorne schiebt man eine Zahl (zb.
in Form eines int) hinein und hinten kommt ein String raus,
der eine textuelle Repräsentierung dieser Zahl darstellt.
Gast #441107
Lesenswert?
• ▲
▼
Hallo!

Eine einfache Methode ist, von dieser Zahl solange 16 zu subtrahieren, 
bis die Zahl kleiner als 16 ist. Damit hättest du die höherwertige 
Ziffer (bzw. Buchstabe) der Rest ist dann die Niederwertige Stelle der 
Hexzahl.
Natürlich geht das nur, wenn die Zahl kleiner als 256 ist.
Es gibt für Programme natürlich auch clevere Lösungen, bei denen die 
Stellen verschoben werden. Diese sind dann auch für größere Zahlen 
geeignet.

Viel Spaß bei der Umsetzung
Guido
Gast #441111
Lesenswert?
• ▲
▼
// Version #1
int dezimalzahl = 45;
int hexadezimalzahl = dezimalzahl;

// Version #2
// http://www.mkssoftware.com/docs/man3/atoi.3.asp
#include <stdlib.h>
char * dezimalzahl = "45";
int hexadezimalzahl = atoi(dezimalzahl);

// Version #3
// http://www.mkssoftware.com/docs/man3/itoa.3.asp
#include <stdlib.h>
int dezimalzahl = 45;
char hexadezimalzahl[17];
itoa(dezimalzahl, hexadezimalzahl, 16);

// Version #4
#include <stdlib.h>
char * dezimalzahl = "45";
int temp = atoi(dezimalzahl);
char hexadezimalzahl[17];
itoa(temp, hexadezimalzahl, 16);

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.