Forum: Compiler & IDEs HEX in ASCII umwandeln!


von Andi (Gast)


Lesenswert?

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

Gruß Andi

von Rene H. (Gast)


Lesenswert?

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

von Fabian (Gast)


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'));

von Andi (Gast)


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.

von Stefan B. (stefan) Benutzerseite


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.

von Rene H. (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Andi (Gast)


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 ?!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Welches Programm? Ich sehe kein Programm.

von Andi (Gast)


Lesenswert?

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
}

von High Performer (Gast)


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.

von Karl H. (kbuchegg)


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
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.

von calculator (Gast)


Lesenswert?

Die vier Darstellungen stellen den gleichen Wert da?

von Klaus W. (mfgkw)


Lesenswert?

Ja

C-Buch lesen!

von Klaus W. (mfgkw)


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

von Karl H. (kbuchegg)


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.

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.