Hallo wie kann ich ein Char zum Beispiel 'A' in einen Binärstring Umwandeln also ==> "01000001". In C. char Buffer[9]; int i; char Wert; for (i = 0; i < 8; i++) Buffer[i] = (Wert & (1 << (7 - i)) ? '1' : '0'; Buffer[8] = '\0'; funktioniert leider nicht.
Warum ist "i" ein int? Kann doch höchstens 7 sein. Mach da lieber einen (unsigned) char draus!
Was bitte bedeutet "funktioniert leider nicht"? Was passiert denn?
Compiler des Atmega128 stürzt leider ab. Es liegt wohl an dieser Zeile: Buffer[i] = (Wert & (1 << (7 - i)) ? '1' : '0'; Gruß fabin
Der Compiler stürzt ab? Dann solltest du einen Bugreport einreichen. Aber das hat dir die Crashmeldung dann schon gesagt.
Das es am Compiler liegt, musst du schon mitteilen. Woher sollen diejenigen das wissen, deren Kristallkugel gerade zur Inspektion ist? Alternativer Code (Ich mag den ?-Operator sowieso nicht): Buffer[i] = '0'; if(Wert & (1 << (7 - i)) Buffer[i] |= 1;
weiß jemand von euch eine andere Möglichkeit? Die auch sehr einfach ist.
Oder: Buffer[i] = '0'; if(Wert & (1 << (7 - i)) Buffer[i] = '1'; (iss noch besser.)
Ich würd's ganz umformulieren (aber den ?:-Operator drnilassen): char Buffer[9]; uint8_t i; char Wert; char* p = Buffer; for (i = 1 << 7; i; i >>= 1) *p++ = (Wert & i) ? '0' : '1'; Buffer[8] = '\0';
Oder (um die doppelte Zuweisung von Detlev zu vermeiden): Buffer[i] = ((Wert >> (7-i)) & 0x01) | '0'; Gibt also genug Lösungen. Allerdings ist das '?' etwas unleserlich. Zudem meint mein avr-gcc es nicht zu kennen ;-( Grüße, Freakazoid
Kann nicht sein. gcc kennt diesen Operator. Was hast du genau geschrieben und was hat der Compiler ausgespuckt?
Main.c:29: error: parse error before ';' token Main.c:34: error: parse error before ')' token Geschrieben: Das von oben (1.Post). Allerdings nochmal Klammern um den if-Block. Wollte er nämlich auch nicht. Vielleicht hab ich ihn auch tot-crosscompiliert ;-) Ist aber auch nicht so wichtig. Wenn ich lustige If-Statements brauche, nehme ich Perl 'Mach das und das und das IF (....)' ;-)
Achso: Zeile 29 war wohl die mit dem '?'. Dann war er verwirrt und wollte kein ')' im weiteren Code mehr ;-) Ich hab das Stück in einem vorhandenen Code reingepostet (deswegen 29...34). Die Sache mit dem '?' hatte ich aber schon öfters. Grüße, Freakazoid
Im Originalposting gibt's auch drei öffnende Klammern und nur zwei schließende.
Sauerei. Vielleicht meinte der OP auch das mit dem 'Compilerabsturz' ;-) Da war ich direkt zu faul zum Klammernzählen ;-( Asche auf mein Haupt. Grüße, Freakazoid
"weiß jemand von euch eine andere Möglichkeit? Die auch sehr einfach ist." jup. Die Funktion itoa. itoa (zahl,string,2);
Sofern sie angeboten wird. Das ist nämlich keine Standardfunktion.
Sorry da habe ich wohl eine Klammer zuviel gemacht. Komisch das der Compiler es nicht erkannt hat. Der Conrad Compiler ist wohl nicht so gut.
Uhm, Conrad? Da du im gcc-Forum gepostet hast, war ich davon ausgegangen, daß du auch gcc benutzt.
Dachte ich auch. Abgesehen davon, daß erst beim zweiten Post der AVR als Zielplatform bekannt wurde. Was ist denn ein 'Conrad'-Compiler? Doch wohl kein Mist vom blauen C, oder?
Argh. Befürchtung bestätigt. Scheint der Compiler der C-Control zu sein (da paßt auch AVR). Furchtbar ;-(
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.