konvertierung dez hex

Gast #87972
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
Gast #87973
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
Gast #87975
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

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