Bit im String (Byte) prüfen

Gast #284248
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 ....
Gast #284251
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))
??
Gast #284252
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...
Gast #284253
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))

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.