Forum: Mikrocontroller und Digitale Elektronik konvertierung dez hex


von jerome parlebas (Gast)


Lesenswert?

Hallo,
ich habe folgendes Problem bei dem ich seit Tagen nicht weiterkomme:

An USART1 empfange ich Daten von einem GSM-Modem, welche in das
Empfangsbuffer RX_BUFFER1 hineingeschrieben werden.

Bsp.: Empfang von R -> RX_BUFFER1[0]=data  wobei data=82

Diese Daten möchte ich auf einem Display sowohl als hex als auch als
ASCII-Zeichen darstellen.Die Darstellung als hex (%X) funktioniert, die
Ausgabe als ASCII-Zeichen (%c) jedoch nicht.

Das ASCII-Zeichen R entspricht ja 82dez bzw. 52hex. Also habe ich
folgenden Schritt eingefügt:

if(data==82){RX1[0]=0x52;} //"Umrechnung dez in hex"

d.h. die empfangenen Daten werden als hex-wert ins Empfangsbuffer
geschrieben.

Damit funktioniert alles, aber das kann doch nicht die beste Lösung
sein. Für data=0 bis data=255 ergeben sich 256 if-Abfragen !
Kann ich das nicht irgendwie besser lösen ?

Gruß Jerome

von Rahul (Gast)


Lesenswert?

kleine Berechnung:
Teile deine Dezimalzahl durch 16. Das Ergebnis ist die höherwertige
Stelle, und der ganzzahlige Rest ist die niederwertige Stelle.
In C gibt es doch eine Funktion, die die ganzzahlige Division (mit
Rest) bildet und dann noch eine, die dir nur den Rest liefert.
Bin momentan nicht mehr ganz in der Syntax von C drin, und weiss die
jetzt nicht aus dem Kopf. Eins war der "/" und das andere weiss ich
gerade nicht.
Gruß Rahul

von crazy horse (Gast)


Lesenswert?

die andere war %

von jerome parlebas (Gast)


Lesenswert?

Das Problem was ich habe liegt nicht in der reinen Umrechnung der
Zahlensysteme.

Nach dem von Dir beschriebenen Verfahren ergibt sich:

82dez:

82/16 = 5 Rest 2 -> 2 als niederwertige Stelle
5/16  = 0 Rest 5 -> 5 als höherwertige Stelle

also 52hex, was ja auch vollkommen richtig ist. Die Stellen können aber
je nach umzurechnender Dezimalzahl die Werte 0...9 und A...F annehmen.


Ich habe deswegen versucht ein solches "Umrechnungsprogramm" zu
schreiben indem ich einen string mit 4 Stellen definiere in der Art

string[0]=0;
string[1]=x;
string[2]= ergebnis höherwertige Stelle
string[3]= ergebnis niederwertige Stelle

An dieser Stelle komme ich aber nicht weiter. Ich kann dieses Ergebnis
(string mit 4byte) ja dem Empfangsbuffer nicht einfach durch

RX1_buffer[0]= string

zuweisen. Vielleicht ist diese Vorgehensweise ja auch falsch.

Gruß Jerome

von crazy horse (Gast)


Lesenswert?

const unsigned char ascii_tab[16]='0',..,'F';

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.