www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umwandlung von ASCII in Hex, Dez oder Bin


Autor: Stefan Schön (stefan0784)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die "bits" erhälst du z.b. so: (Pseudocode!)
for (int i = 0; i <8 ; i++) {
 char c;
 if (input & (1<<i) {
  c = '1';
 } else {
  c = '0';
 }
}

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:
 char c1, c2;
 c1 = getHex(input & 0x0F);
 c2 = getHex(input >> 4 &0x0F);

 char getHex(int i) {
  if (i < 9) {
   return '0'+i;
  }
  return 'A'+(i-10);
 }

Autor: Stefan Schön (stefan0784)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt.
Funktioniert einwandfrei.
Vielen Dank für die wie immer schnelle Hilfe im Forum!

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
...
...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%x

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und eine Binärdarstellung musst Du Dir selber bauen, dafür gibt es 
keinen Formatspezifizierer.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Btw: Es könnte sein, dass bei einigen Compilern für Microprozessoren 
nicht der volle Formatzeichensatz von printf vorhanden ist, oder dieser 
erst durch linken von speziellen Bibliotheken oder durch Schalter 
ausgewählt werden muss.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eigentlich schon einen Hausaufgaben-Löser-Tarif für's Forum?

Kostenloser Tipp: itoa(), utoa(), ltoa() etc.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das trifft aber nur für die Umwandlung eines Integers in einen String 
zu.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Hausaufgabe nannte ein "ASCII-Zeichen".  Probleme, daraus ein int zu 
erhalten?  Nicht wirklich?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.