# Bits aus Byte-Array holen



## MW (24 Februar 2007)

Ich steh grad mächtig auf´n Schlauch  

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


----------



## zotos (24 Februar 2007)

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



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


----------



## Ralle (24 Februar 2007)

In Delphi mach ich das byteweise so, das geht dann ja fast genauso in VB :


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


----------



## lorenz2512 (24 Februar 2007)

hallo,
vielleicht hilft dir das:http://vb-tec.de/bitarray.htm


----------



## MW (25 Februar 2007)

zotos schrieb:


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


 

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


----------



## MW (25 Februar 2007)

Ralle schrieb:


> In Delphi mach ich das byteweise so, das geht dann ja fast genauso in VB :
> 
> 
> ```
> ...


 

Und mit deiner For schleife kann es so aussehen, funktioniert auch

```
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    
und muss mich nur für eine variante entscheiden


----------



## xhasx (3 Juli 2007)

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


----------



## xhasx (11 Juli 2007)

??? Bist du weitergekommen???


----------

