Forum: Mikrocontroller und Digitale Elektronik Im binäres Format ausgeben


von Volkmer (Gast)


Lesenswert?

Hallo Kollegen,

kann man unter C eine im binären Format ausgeben lassen?

Gibt es, wie bei Hex = x oder Dezimal = d, auch einen Buchstaben für
das binäre Format?

Danke.

von Tobi (Gast)


Lesenswert?

meines wissens nach (un meiner helpfile nach) kann printf (das meinst du
doch wohl) das nicht direkt. sollte aber kein problem sein, soetwas
selber zu machen

von Axos (Gast)


Lesenswert?

meinst du sowas: 0b11111111 = 0xFF = 256 ?
oder meinst du, dass der compiler statt eine HEX Datei eine Binary
Datei erzeugt ?
Welchen Compiler benutzt du ?
Wenn du WinAVR benutzt kann man das einfach in dem Makefile umstellen,
da sind sogar die beispielwerte angegeben.

MfG Axos

von T.Stütz (Gast)


Lesenswert?

@Axos
kleiner schreibfehler 0xFF=255 und nicht 256 ;-))

von Volkmer (Gast)


Lesenswert?

@axos

ja ich meine schon den ersten fall.

möchte eine dezimale zahl als binäre zahl darstellen.

hast du nen kleinen tipp, wie ich an dieses problem rangehen kann?

von Axos (Gast)


Lesenswert?

Oder willst du z.B. 0xFF im binären Format in einen string schreiben ?
Dann kann dir wohl nur ne (einfache) routine helfen.

von Axos (Gast)


Lesenswert?

@T.Stütz:
Hast recht, Null ist ja auch ne zahl. Danke

von Volkmer (Gast)


Lesenswert?

ne möchte schon entweder ne dezimale oder auch ne hexadezimale zahl in
eine binäre zahl umwandeln und darstellen.

von Tobi (Gast)


Lesenswert?

char string[8];
for (int i=0;i<8;i++,zahl>>1)
if (zahl&1) string[i]=1 else string[i]=0;

von Tobi (Gast)


Lesenswert?

mach lieber string[9] und am ende noch ein string[8]=0

von Axos (Gast)


Lesenswert?

@Volkmer:
du testest ob in die zahl 128 rein geht.
Wenn ja dann ziehst du 128 von der dezimalen zahl ab und setzt das
erste bit auf 1 ansonsten ist das einste bit 0.
Dann testest du auf 64, dann auf 32 und immer so weister bis zu 1.

Beispiel:


if (zahl > 128)
{
  string[0] = 1;
  zahl-=128;
}
if (zahl > 64)
{
  string[1] = 1;
  zahl-=64;
}
.
.
.
kann man sicher viel schöner machen aber so ist es wenigstens leicht
verständlich.

von Axos (Gast)


Lesenswert?

@Tobi
Ok, du bist mir zuvorgekommen, aber ich glaube meine ist leichter zu
verstehen für den Anfang.

von Tobi (Gast)


Lesenswert?

ist es ganz sicher. aber auch einiges mehr schreibarbeit.
eine schleife wäre doch wohl noch drin gewesen :)

von T.Stütz (Gast)


Lesenswert?

Achtung: MSB ist in string[7]
Bsp: 0x23 => "11000100"

von Axos (Gast)


Lesenswert?

auf deutsch:
Höchstwertiges Bit ist in string[7] ;)

von Tobi (Gast)


Lesenswert?

mach ich doch... ich schiebe doch rechts raus
@axos: bei dir ists in string[0]

von Rufus T. Firefly (Gast)


Lesenswert?

Einige kleine Fehler behoben:

char string[9]; // Stringlänge!
string[8] = '\0'; // abschließende Null

for (int i = 0; i < 8; i++, zahl <<= 1)  // <<= !
  if (zahl & 0x80)
    string[i] = '1'; // Hochkommata
  else
    string[i] = '0'; // Hochkommata

Dann sollte es besser funktionieren. MSB landet so in string[0].

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.