Forum: Mikrocontroller und Digitale Elektronik Probleme Hex-Werte auf Display auszugeben


von Bernd (Gast)


Lesenswert?

Hallo zusammen,

ich habe folgendes Problem. Ich habe in einem Array mehrere Werte in HEX 
stehen.

unsigned char Data[8];

Nun möchte ich diese Daten auf einem LC-Display ausgeben. Die Ausgabe an 
sich ist kein Problem.

Mein Problem ist, die Daten in Hex auszugeben. Normale Werte (Integer) 
wandle ich mit einer Funktion in einen String um und gebe sie dann auf 
dem Display aus.
1
IntToString(ausg_str, Data[ii], 2,1);
2
LCDOuts(ausg_str);

Wenn ich das nun mit meinen Hex-Werten mache, werden die Werte natürlich 
nicht in Hex sondern Dezimal ausgegeben, aber ich möchte z.B. 11, 22, 
33(Hex)... usw. ausgeben, anstatt 17, 34, 51...

Wenn ich die Daten direkt ausgebe...
1
LCDOuts(Data[ii]);

wird nur Mist ausgegeben.

Wäre klasse, wenn mir dabei jemand helfen könnte, die Daten auch 
wirklich in Hex auszugeben...

Gruß
Bernd

von Patrick (Gast)


Lesenswert?

>Ich habe in einem Array mehrere Werte in HEX stehen.
Das ist so nicht ganz richtig. Die stehen da binär drin. Es ist egal, ob 
Du sie HEX, octal oder dezimal reinschreibst, sie werden immer binär 
reingeschrieben.

Wahrscheinlich müsstest Du so was machen wie:
1
 ausg_str = sprintf("%h", Data[ii]);
2
LCDOuts(ausg_str);

von crazy horse (Gast)


Lesenswert?

mit sprintf(%X) geht das, dürfte aber das Programm mächtig aufblasen.
Kannst die aber selber einen kleine Routine schreiben. Tabelle, die 
0..15 in 0..F umcodiert, nibbleweise adressieren.

von Patrick (Gast)


Lesenswert?

Natürlich müsste es heissen:
1
 sprintf(ausg_str, "%h", Data[ii]);

Bin mir aber nicht sicher, ob %h richtig ist. es könnte auch %x sein.

von Patrick (Gast)


Lesenswert?


von Analog (Gast)


Lesenswert?

void PrintHex(unsigned char byte)
{
  /*~~~~~~~~~~~~~*/
  unsigned char byte1, byte2;
  /*~~~~~~~~~~~~~*/

  byte1 = (unsigned char) (byte / 16);
  byte2 = (unsigned char) (byte % 16);

  /* printf("byte1: %d byte2: %d",byte1,byte2); */
  if(byte1 <= 9)
    PUTC(byte1 + 48);
  else
    PUTC(byte1 - 10 + 65);
  if(byte2 <= 9)
    PUTC(byte2 + 48);
  else
    PUTC(byte2 - 10 + 65);
}

von Bernd (Gast)


Lesenswert?

Hallo,


vielen Dank.


Ich habs hinbekommen. Ich habs so gemacht, wie Analog es geschreiben 
hat.

Funktioniert prima.

Vielen Dank.

Gruß
Bernd

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.