Bits aus Byte-Array holen

MW

Level-1
Beiträge
1.186
Reaktionspunkte
272
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich steh grad mächtig auf´n Schlauch :confused:

Ich hab einen Array der aus ca. 100 Bytes besteht,
Ich muss aus einigen Bytes dieses Arrays einzelne Bits (Boolean)
abfragen. Hab leider noch keinen Lösungsansatz, deshalb frag ich euch
mal



Entwicklungsumgebung: Visual Basic .Net
 
Nur so eine Idee... also ich habe es nicht getestet.
Maskieren mit "AND" müsste doch gehn (ich kenne leider nur vb ohne .Net):


Code:
IF MyBYTE AND 16 THEN
  'tue was
  MyBit = True;
ELSE
  MyBit = False;
END IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Delphi mach ich das byteweise so, das geht dann ja fast genauso in VB :ROFLMAO::

Code:
          for BitNr := 0 to 7 do
          begin
            BinNeu := Byte and (1 shl BitNr);
            if BinNeu > 0 then
            begin
            ...
            end;
          end;
 
Nur so eine Idee... also ich habe es nicht getestet.
Maskieren mit "AND" müsste doch gehn (ich kenne leider nur vb ohne .Net):


Code:
IF MyBYTE AND 16 THEN
  'tue was
  MyBit = True;
ELSE
  MyBit = False;
END IF


Habs mal zum test reingekloppt und es funktioniert so !!

Dim test As Byte = CByte(TextBox1.Text)
If test And 1 Then ' Bit 1
...
End If
If test And 2 Then ' Bit 2
...
End If
If test And 4 Then ' Bit 3
...
End If
If test And 8 Then ' Bit 4
...
End If
If test And 16 Then ' Bit 5
...
End If
If test And 32 Then ' Bit 6
...
End If
If test And 64 Then ' Bit 7
...
End If
If test And 128 Then ' Bit 8
...
End If
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Delphi mach ich das byteweise so, das geht dann ja fast genauso in VB :ROFLMAO::

Code:
          for BitNr := 0 to 7 do
          begin
            BinNeu := Byte and (1 shl BitNr);
            if BinNeu > 0 then
            begin
            ...
            end;
          end;


Und mit deiner For schleife kann es so aussehen, funktioniert auch
Code:
Dim binNeu As Boolean                                      ' hilfsbit
Dim boolbyte(7) As Boolean                                ' erzeugter "Bitarray"
Dim INByte As Byte = CByte(TextBox1.Text)         ' eingangs Byte 
 
For BitNr As Byte = 0 To 7 Step +1
     binNeu = INByte And (1 << BitNr)
     If binNeu Then
          boolbyte(BitNr) = True
     End If
Next BitNr



Jetzt hab ich auch wieder nen Plan :ROFLMAO: :ROFLMAO: :ROFLMAO:
und muss mich nur für eine variante entscheiden
 
Zuletzt bearbeitet:
So sieht's bei mir in VBS aus...
Das "Geheimnis" liegt in der ShiftAndMask Funktion. das Gegenstück wäre SetBitInTag oder ResetBitInTag...

Dim TempLong, ZylinderIndex, Ergebnis

TempLong = CLng(SmartTags("EcmRezeptur\AblaufIntern")(Adresse+1))

For ZylinderIndex = 0 To 31
ShiftAndMask TempLong,Ergebnis, ZylinderIndex, &H0001
If Ergebnis Then
SmartTags("EcmRezeptur\Aktion2ZylinderZurGs")(ZylinderIndex)=True
Else
SmartTags("EcmRezeptur\Aktion2ZylinderZurGs")(ZylinderIndex)=False
End If
Next
 
Zurück
Oben