HEX in ASCII umwandeln!

Gast #1888385
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
}
Gast #1888398
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.
#1888468
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.
#1892510
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren