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


von SoeSoe (Gast)


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.

von Karl H. (kbuchegg)


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.

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.