konvertierung dez hex

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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.