www.mikrocontroller.net

Forum: Compiler & IDEs Bit im String (Byte) prüfen


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich suche nach einer eleganten Möglichkeit ein Bit in einem String zu
prüfen.
Der Hintergrund ist der, das im Statusbyte die Brauchbarkeit des
Strings verschlüsselt ist, d.h. ist Bit 2 im 15. Zeichen 0 ist der
String unbrauchbar.
Bei 7 relevanten Bit bleiben da immerhin einige Möglichkeiten.
Gibt es da etwas besseres, als
If(timestring[15] == 0x02 || timestring[15] == 0x03 || timestring[15]
== 0x06 || timestring[15] == 0x07 ....

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das lässt sich mit einem logischen UND lösen:

  if (!(timestring[15] & 4))
  {
    // ungültig
  }


4 ist der numerische Wert von Bit 2 (angenommen, daß richtig gezählt
wird).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für rechenfaule geht auch (1 << 2) :-)

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rufus
Was Du schreibst ist sicher richtig, aber ich verstehe es nicht ganz
1. Logisch UND habe ich immer als && geschrieben. Mache ich was
falsch?
2. Wenn ich etwas mit 4 via und verknüpfe, was kommt dann dabei raus?
Ich würde jetzt denken, dass nur dann True rauskommt, wenn mein
Verknüpfungsparter == 4 ist?!
OK in menem Fall wäre es 2 weil ich bit0 als 1. Bit gezählt habe, aber
das ist im Endeffekt ja unerheblich

@Rolf
etwas wie :
If(timestring[15] == timestring[15] |= (1 << 2))
??

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gemeint war nicht logisches sondern bitweises oder.

also zb:
0b10011010 &
0b00110000 =
0b00010000

dh, da wo an beiden stellen ne 1 ist, kommt ne 1 raus. benutzt man
gerne zum "maskieren" von bits. also genau das, was du willst...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1. Logisch UND habe ich immer als && geschrieben. Mache ich was
> falsch?

Du willst kein logisches Und, sondern ein bitweises. Bei ersterem wird
der ganze Wert als logisch falsch angesehen, wenn er 0 ist, als wahr,
wenn er 1 ist. Bei letzterem wird jedes Bit einzeln verknüpft.

> 2. Wenn ich etwas mit 4 via und verknüpfe, was kommt dann dabei
> raus?

4 wenn das entsprechende Bit in dem "etwas" gestetzt ist, sonst 0.

> @Rolf
> etwas wie :
> If(timestring[15] == timestring[15] |= (1 << 2))
> ??

Nein, eher:

if(timestring[15] & (1 << 2))

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meine natuerlich bitweises und...

ach ja:
1<<0 = 0b00000001
1<<1 = 0b00000010
1<<2 = 0b00000100
3<<4 = 0b00110000
usw..

quasi "schieben" auf bitebene...

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.