Umwandlung von ASCII in Hex, Dez oder Bin

OP #1046207
Lesenswert?

Hi Mikrocontrollers,

ich habe ein Problem. (Sonst wär ich ja auch nicht im Forum :-) )
Problemstellung:
Ich habe einen At89C51CC03 als Controller. Dieser empfängt über UART ein 
Datenbyte das auf der ASCII Tabelle zwischen  ! = 0x21 und  ~ = 0x7E 
liegt.
Dieses Zeichen muss ich folgendermassen umwandeln.


1. in den Binär-Wert wobei ich jede einzelne Binär_Zahl einzeln ausgeben 
muss. Bsp.: 11100010  a[0] = '1'; a[1] = '1'; ....; a[6] = '1'; a[7] = 
'0'

2. in den DezimalWert. Bsp.: 0x33 = '3' = 51
   Ausgabe a[0] = 5; a[1] = 1

3. in den Hex-Wert. Bsp.: ASCII Zeichen = '7' = 0x55.
   Ausgabe a[0] = '0'; a[1] = 'x'; a[2] = '5'; a[3] = '5'

Hab mir für die Binärumwandlung selber einen Code geschrieben. Jedoch 
ist der Riesengroß und mit hunderten von if Abfragen.
Jetzt die Frage an euch. Hat einer eine Funktion dafür schon mal 
entwickelt oder gibts ne Bibliothek?
Habs jetzt schon mit printf und Co. probiert. Ich komm aber nie aufs 
richtige Ergebnis.
Die Umwandlung von int in ASCII oder hex funktioniert einwandfrei - 
jedoch andersrum krieg ich es nicht gebacken.
Persönliche Seite #1046211
Lesenswert?

Die "bits" erhälst du z.b. so: (Pseudocode!)
1
for (int i = 0; i <8 ; i++) {
2
 char c;
3
 if (input & (1<<i) {
4
  c = '1';
5
 } else {
6
  c = '0';
7
 }
8
}

Den dezimalwert erhälst du durch teilen durch 10 mit rest (da kommst du 
sicher selbst drauf funktioniert gaaaaanz normal wie schriftliches 
rechnen in der Schule....

Bei Hex gehts so:
1
 char c1, c2;
2
 c1 = getHex(input & 0x0F);
3
 c2 = getHex(input >> 4 &0x0F);
4

5
 char getHex(int i) {
6
  if (i < 9) {
7
   return '0'+i;
8
  }
9
  return 'A'+(i-10);
10
 }
Gast #1476222
Lesenswert?

Hallo,
muss ein C Programm schreiben das ein ASCII Zeichne einliest und 
anschließend das Zeichen, den Dezimalwert des Zeichens, den 
Hexadezimalen Wert des Zeichens und den binären Wert des Zeichens 
ausgibt.
Habe allerdings Schwierigkeiten mit der Ausgabe der Hex und Bin werte. 
Gibts dafür nen ähnlichen Befehl wie für die Dezimalwerte (%d)

Quasi:
...
int a;
a=_getche ();
printf("Zeichen: %c \n Dezimalwert: %d \nHEXwert: ??? \n BINwert: 
???",a,a,a,a);
...
...

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