Forum: Mikrocontroller und Digitale Elektronik Anfanger Hex Dezimal


von Martin (Gast)


Lesenswert?

Hallo, ich habe mal ne Anfängerfrage!

Ich möchte gerne eine Zahl zb. 45 direkt in einen Hex Wert umwandeln.
Wie kann ich dies am besten realiesieren?
Programmiersprache C .

von unsichtbarer WM-Rahul (Gast)


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.

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

schau mal unter "atoi" nach. Ist es das was Du meinst ?
Oder meinst Du mit "45" wirklich ne 45 - und keinen String.
Dann gibt es wirklich nichts zu wandeln.

Gruss
Frank

von Karl heinz B. (kbucheg)


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.

von flintstone (Gast)


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

von Stefan (Gast)


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);

von Lehrer (Gast)


Lesenswert?

Klasse! Nun hat Martin seine Hausaufgaben erledigt. Er bekommt eine "1".

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Version #4 gefällt mir am besten...

von Martin (Gast)


Lesenswert?

Na dann würde ich mal sagen Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.