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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren