LER BIT A BIT

HELIO.COSTA 26/04/2014 22:21:31
#437657
Estou começando em VB.Net.
Estou lendo um arquivo via serial com 15 bytes e agora tenho q dividir este arquivo.
Tenho q pegar cada de byte e ler os 8 bits de cada byte.
Os caracteres deste arquivo não são somente strings.
Já estou a 02 dias batalhando com este problema. Se alguem poder ajudar fico grato.
HELIO.COSTA 28/04/2014 08:41:03
#437681
Ninguem?
GUIMORAES 28/04/2014 08:50:09
#437682
Posta o código que está utilizando ou até um trecho do arquivo.
HELIO.COSTA 28/04/2014 09:12:55
#437685
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim StrValor As String
StrValor = [Ô][Ô]
With SerialPort1
If .IsOpen = True Then .Close()
.PortName = [Ô]COM1[Ô]
.BaudRate = [Ô]9600[Ô]
.Parity = IO.Ports.Parity.None
.DataBits = [Ô]8[Ô]
.StopBits = IO.Ports.StopBits.One
SerialPort1.Open()
StrValor = .Read() [ô] readLine() não funciona
ListBox1.Items.Add(Mid(StrValor, 1, Len(StrValor)))
SerialPort1.DiscardInBuffer()
End With

Preciso abrir ler os 04 prineiros bytes, o resto é ignorado.
Cada byte vem com caracteres de máquina (tipo carinha, Losângulo, etc.).
O q preciso na verdade é separar e desmembrar cada byte e desmembrar, jogando em um arry.
Desde já agradeço.
Timer1.Enabled = False
End Sub
OCELOT 28/04/2014 11:50:14
#437692
Resposta escolhida
Existe a classe BitArray que faz isso, você pode passar um array de bytes para ela e então verificar cada bit, em que ele retorna true ou false caso esteja setado ou não

Dim b as new BitArray(seuArrayDeBytes)

Dim bit0 As Boolean = b(0)

Lembrando que ele começa pelo bit menos significativo, então digamos que você passe dois bytes para ele com os valores 170 e 85 que em binario seria

10101010 e 01010101 respectivamente

a ordem dos bits lida seria

1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 - sequencia binaria
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 - indice no array
HELIO.COSTA 30/04/2014 09:18:21
#437798
Olá pessoal,
Consegui resolver com um exemplo aqui do site, se alguem mais precisar, abaixo o código:
Private Const _PRT_BIT_SIZ As Byte = &H8

Private Function ByteBit(byval _val As Byte) As String

Dim _res_tmp_val as string = [Ô][Ô]
Dim i As Byte = 0
do while _val <> 0
_res_tmp_val &+ _val Mod 2
_val = CByte(val \ 2)
loop

for i = 1 to CByte(_PRT_BIT_SIZ - Len( _res_tmp_val))
_res_tmp_val = _res_tmp_val & 0
Next

Return _res_tmp_val

Agradeço a todos que colaboraram.
Tópico encerrado , respostas não são mais permitidas