Hallo, wie im Betreff beschrieben habe ich das Problem aus einem HEX Wert einen ASCII zu generieren. Wer kann mir helfen ? Gruß Andi
Kannst Du ein Beispiel nennen? Und in welcher Form liegt der Hex Wert vor? (als char*)?
Wenn es sich um zwei Bytes handelt: ascii = (((byte[0] >= 'A') ? (byte[0] - 'A' + 10) : (byte[0] - '0')) << 4) + ((byte[1] >= 'A') ? (byte[1] - 'A' + 10) : (byte[1] - '0'));
Der HEX Wert liegt als uint8_t vor und soll später mal auf einem Display ausgegeben werden. Ich habe z.B. den Text 0x48 0x41 0x4C 0x4C 0x4F und der soll auf dem Display als "HALLO" erscheinen.
Du brauchst nichts umzuwandeln. 0x48 ist nur eine andere Darstellung des Zeichens 'H'. Wenn du eine Funktion zur Ausgabe eines Zeichens hast, ist es egal, ob du die mit 0x48 oder 'H' oder 72 fütterst.
Hmm.... den kannst Du einfach zuweisen, mit casten.
1 | uint8_t value = 0x48; |
2 | char txt = (char) value; |
@Stefan B Mein Programm weiß aber nicht von alleine in welcher Form die Zahlen/Buchstaben angezeigt werden sollen.... @Rene H. Das funzt nicht... da stehen nur 0x00 in txt ?!
So sieht der Teil von meinem Programm aus, der die HEX Werte in ASCII umwandel soll. Geht aber leider nicht :-(
1 | uint8_t i=0; |
2 | uint8_t test[5]; |
3 | char txt[5]; |
4 | |
5 | test[0] = 0x48; |
6 | test[1] = 0x41; |
7 | test[2] = 0x4C; |
8 | test[3] = 0x4C; |
9 | test[4] = 0x4F; |
10 | |
11 | for(i=0; i<5;i++); |
12 | {
|
13 | txt[i] = (char) test[i]; // Erwarte das in Byte1-5 "HALLO" steht |
14 | }
|
>Geht aber leider nicht :-(
Was genau geht nicht? Selbst in test steht schon Dein Text drin. Daran
ändert das Kopieren nichts mehr. Evtl. möchtest Du einen String ausgeben
und hast die abschließende null vergessen?
Und wo willst Du den Text darstellen, der Deiner Meinung nach nicht
anzeigt wird? Und was wird statt des Textes dargestellt?
Im Übrigen ist es äußerst ungünstig (und gerade bei technikzentrierten
Zeitgenossen Unsitte ;-) Texte im Hexformat anzugeben. Das macht absolut
keinen Sinn. Dü könntest statt 0x48 auch einfach 'H' (mit den
Apostrophen) schreiben. Das wäre viel einfacher zu lesen. Am besten ist
es natürlich, gleich einen String "Hallo" zu definieren. Da ist dann
auch gleich die abschließende null dabei.
Bitte präzisiere mal Dein Problem.
Andi schrieb: > So sieht der Teil von meinem Programm aus, der die HEX Werte in ASCII > umwandel soll. > > Geht aber leider nicht :-( Doch das geht. Nur wirst du dir das Ergebnis wahrscheinlich falsch ansehen und daher wieder die ASCII Codes sehen anstelle der Zeichen, für die sie stehen. > Mein Programm weiß aber nicht von alleine in welcher Form die > Zahlen/Buchstaben angezeigt werden sollen.... Das muss es auch nicht wissen. Denn: In deinem Programm gibt es gar keine Buchstaben! Es gibt nur Zahlen. Bei dir im speziellen Codes. Jeder Code steht für einen Buchstaben. (Siehe ASCII Tabelle) und erst das Ausgabegerät weiss, dass es bei erhalt des Codes 0x48 auf deinem Bildschirm die Pixel
1 | * * |
2 | * * |
3 | ******* |
4 | * * |
5 | * * |
einschalten muss, die dein Gehirn dann als 'H' liest. Ob du in deinem Programm
1 | char txt = 0x48; |
2 | char txt = 'H'; |
3 | char txt = 72; |
schreibst ist Jacke wie Hose. Alle 3 Formen beweirken genau dasselbe. In der Variablen txt wird das Bitmuster 01110010 abgelegt. Allerdings ist aus naheliegenden Gründen für manchen Verwendungszweck manchmal die eine Form geeigneter als die andere und drückt die dahinterstehende Absicht besser aus. Das ist aber auch schon der einzige Unterschied in den 3 Schreibweisen.
Klaus Wachtler schrieb: > Ja Nachtrag: 0x48, 'H' und 72 sind in dem obigen Beispiel gleichwertig (falls der Rechner ASCII verwendet, was inzwischen ziemlich durchgehend der Fall ist; ansonsten wäre 'H' durch etwas anders zu ersetzen). Aber falls du mit der vierten Schreibweise das binäre 01110010 meinst: nein, das ist der falsche Wert. Richtig wäre: 0b01001000
Klaus Wachtler schrieb: > Klaus Wachtler schrieb: >> Ja > > Nachtrag: 0x48, 'H' und 72 sind in dem obigen Beispiel > gleichwertig (falls der Rechner ASCII verwendet, was inzwischen > ziemlich durchgehend der Fall ist; ansonsten wäre 'H' durch etwas > anders zu ersetzen). > > Aber falls du mit der vierten Schreibweise das binäre 01110010 meinst: > nein, das ist der falsche Wert. > Richtig wäre: 0b01001000 Mein Fehler. Ich hab irrtümlich 72 als 'Hexzahl' in binär 'übersetzt', anstelle von richtigerweise 0x48 Danke für die Korrektur.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.