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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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].

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]
  • [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.