Forum: Compiler & IDEs Konvertierung Char in Binärstring


von Fabian Höflinger (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

Warum ist "i" ein int? Kann doch höchstens 7 sein. Mach da lieber
einen (unsigned) char draus!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was bitte bedeutet "funktioniert leider nicht"?

Was passiert denn?

von Fabian Höflinger (Gast)


Lesenswert?

Compiler des Atmega128 stürzt leider ab.

Es liegt wohl an dieser Zeile:
Buffer[i] = (Wert & (1 << (7 - i)) ? '1' : '0';

Gruß fabin

von Rolf Magnus (Gast)


Lesenswert?

Der Compiler stürzt ab? Dann solltest du einen Bugreport einreichen.
Aber das hat dir die Crashmeldung dann schon gesagt.

von Detlev (Gast)


Lesenswert?

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;

von Fabian Höflinger (Gast)


Lesenswert?

weiß jemand von euch eine andere Möglichkeit? Die auch sehr einfach ist.

von Detlev (Gast)


Lesenswert?

Oder:

Buffer[i] = '0';
if(Wert & (1 << (7 - i)) Buffer[i] = '1';

(iss noch besser.)

von Rolf Magnus (Gast)


Lesenswert?

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';

von Rolf Magnus (Gast)


Lesenswert?

Ups.. muß natürlich heißen:

    *p++ = (Wert & i) ? '1' : '0';

von André K. (freakazoid)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

Kann nicht sein. gcc kennt diesen Operator. Was hast du genau
geschrieben und was hat der Compiler ausgespuckt?

von André K. (freakazoid)


Lesenswert?

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 (....)' ;-)

von André K. (freakazoid)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

Im Originalposting gibt's auch drei öffnende Klammern und nur zwei
schließende.

von André K. (freakazoid)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

"weiß jemand von euch eine andere Möglichkeit? Die auch sehr einfach
ist."

jup. Die Funktion itoa.

itoa (zahl,string,2);

von Rolf Magnus (Gast)


Lesenswert?

Sofern sie angeboten wird. Das ist nämlich keine Standardfunktion.

von Fabian Höflinger (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

Uhm, Conrad? Da du im gcc-Forum gepostet hast, war ich davon
ausgegangen, daß du auch gcc benutzt.

von André K. (freakazoid)


Lesenswert?

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?

von André K. (freakazoid)


Lesenswert?

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
Noch kein Account? Hier anmelden.