mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Empfangene ASC Zeichen in Hex Zahlen umwandeln


Autor: SoeSoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte einen empfangen Datenstream, den ich über die RS232 empfangen 
habe wie z.B. 01 A4 CF 4D 11 55 7A 9F 45 21
der empfangen ASC stream wuerde dann in etwa so aussehen:
48 49 32 65 52 32 67 70 32 ....(dec)
als Hex-Zahlen interpretieren und entsprechenden Array zugewiesen 
werden.
Wie z.B.
BYTE cRegister[A];
in cRegister soll dann der oben genannte Stream stehen:
cRegister[0]= 0x01
cRegister[1]= 0xA4
cRegister[2]= 0xCF
cRegister[3]= 0x4D
usw. stehen.

Weiss jemand wo ich eine entsprechen effiziente Methode finde - am 
besten Source code.
Vielen Dank.
P.S. sagt nicht das es irgendwo im Forum steht. Wahrscheinlich habt ihr 
recht, aber ich habe es bei der Suche nicht gefunden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Du bist im falschen Forum. Codesammlung bedeutet, dass
   jamnd fertige Routinen der Allgemeinheit zur Verfügung stellt.
   Ich habe den Thread dann mal verschoben

2) Wo liegt denn konkret das Problem?
   Das ist doch ziemlich einfach zu lösen
   Vom ASCII Code ziehst du den Code für '0' ab und erhältst
   damit für die Codes '0' bis '9' die entsprechenden Zahlen.
   Ist die resultierende Zahl größer als 10, dann war das
   original ASCII Zeichen offenbar im Bereich 'A' bis 'F' und
   du musst eine weitere Korrektur durch Subtraktion anbringen
   um daraus die Zahlen 10 bis 15 zu erhalten.
   Schnapp dir eine ASCII Tabelleund tüftle das aus. Sollte nicht
   länger als 2 Minuten dauern

   Jetzt hast du also schon mal eine Möglichkeit um aus dem
   ASCII Strom die entsprechenden einzelnen Zahlen zu erhalten
   und zwar während du die Zeichen empfängst.
   Jetzt musst du noch 2 aufeinanderfolgende Zahlen, die ja
   jeweils das High-Nibble und das Low-Nibble darstellen, zu
   einer einzigen Zahl zusammenfassen:
   Erste Zahl mal 16 nehmen und zweite Zahl addieren (aufpassen,
   unbedingt unsigned rechnen, sonst passieren da unter
   Umständen seltsame Dinge). Was gleichwertig ist:
     Zahl = (HighNibble << 4 ) | LowNibble;

   Tja und dann brauchst du nur noch die so erhaltene Zahl
   fortlaufend in einem Array ablegen.


Summa summarum, sollte das nicht so schwer sein und sich in
ca 5 oder 6 Zeilen Code abhandeln lassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.