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.
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 | }
|
Perfekt. Funktioniert einwandfrei. Vielen Dank für die wie immer schnelle Hilfe im Forum!
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); ... ...
Und eine Binärdarstellung musst Du Dir selber bauen, dafür gibt es keinen Formatspezifizierer.
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.
Gibt es eigentlich schon einen Hausaufgaben-Löser-Tarif für's Forum? Kostenloser Tipp: itoa(), utoa(), ltoa() etc.
Das trifft aber nur für die Umwandlung eines Integers in einen String zu.
Die Hausaufgabe nannte ein "ASCII-Zeichen". Probleme, daraus ein int zu erhalten? Nicht wirklich?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.