Umwandlung von ASCII in Hex, Dez oder Bin

OP #1046207
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.