mikrocontroller.net

Forum: Compiler & IDEs Einzelne Bits eines Bytes in ein Array schreiben


Autor: chrigu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte alle Bits eines Bytes einzeln in ein Array schreiben.
Doch leider habe ich nicht die geringste Ahnung wie man so etwas machen
könnte. Ein Beispiel zur Verdeutlichung:

char a=0b10101101;
jetzt will ich die einzelnen Bits so in ein Array b schreiben, das
jedes Array-Element ein Bit von a enthält; also am schluss sollte das
so aussehen:
b[0] ist gleich 1
b[1] ist gleich 0
b[2] ist gleich 1
b[3] ist gleich 1
b[4] ist gleich 0
... b[7] ist gleich 1

Hoffe ich habe das verständlich geschildert. Hat jemand eine Idee oder
ein ansatz einer Idee dazu??
Danke im Voraus, chrigu

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for (int i = 0; i < 8; ++i)
{
  if ( (a & (1 << i)) == (1 << i))  b[i] = 1;
  else b[i] = 0;
}

So in etwa wäre denkbar. Die Idee ist, jedes Bit einzeln abzufragen und
dein Array entsprechend zu setzen.

Autor: snowman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn es zeitkritisch ist und deshalb schnell gehen soll:

b[0] = a & 0b00000001;
b[1] = a & 0b00000010;
...
b[7] = a & 0b10000000;

Autor: snowman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oops :( ...war wohl ein bisschen zu früh feierabend ;)
also richtig:

x = a;

b[0] = x & 1;
x >> 1;   //
b[1] = x & 1;
x >> 1;

...
b[7] = x & 1;

Autor: chrigu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah super, danke!
@ snowman: wenn ich die variable a nachher nicht mehr brauche kann ich
ja das ganze direkt mit a machen, oder?

Autor: snowman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das kannst du gleich mit a machen, wenn du die nachher nicht mehr
bauchst. noch zwei anmerkungen:
1. lezte zeile kann noch kürzer heissen: b[7] = x;
2. und mit x >> 1; meine ich eine bitweise rotation nach rechts, so
dass sich x dabei ändert (ich weiss den syntax nicht mehr genau,
vielleicht heisst er auch ror(x) oder so ähnlich).

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> ist keine Rotation sondern ein Shift, aber das ist hier egal.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.