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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren