www.mikrocontroller.net

Forum: Compiler & IDEs HEX in ASCII umwandeln!


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie im Betreff beschrieben habe ich das Problem aus einem HEX Wert einen 
ASCII zu generieren.
Wer kann mir helfen ?

Gruß Andi

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du ein Beispiel nennen?
Und in welcher Form liegt der Hex Wert vor? (als char*)?

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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'));

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.... den kannst Du einfach zuweisen, mit casten.
uint8_t value = 0x48;
char    txt = (char) value;

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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 ?!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Programm? Ich sehe kein Programm.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sieht der Teil von meinem Programm aus, der die HEX Werte in ASCII 
umwandel soll.

Geht aber leider nicht :-(
uint8_t i=0;
uint8_t test[5];
char txt[5];

test[0] = 0x48;
test[1] = 0x41;
test[2] = 0x4C; 
test[3] = 0x4C;
test[4] = 0x4F;

for(i=0; i<5;i++);
{
  txt[i] = (char) test[i];  // Erwarte das in Byte1-5 "HALLO" steht
}

Autor: High Performer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

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

Bewertung
0 lesenswert
nicht lesenswert
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
   *     *
   *     *
   *******
   *     *
   *     *
einschalten muss, die dein Gehirn dann als 'H' liest.

Ob du in deinem Programm
  char txt = 0x48;
  char txt = 'H';
  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.

Autor: calculator (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die vier Darstellungen stellen den gleichen Wert da?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja

C-Buch lesen!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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

Bewertung
0 lesenswert
nicht lesenswert
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.

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.