LER BIT A BIT
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.
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.
Ninguem?
Posta o código que está utilizando ou até um trecho do arquivo.
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
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
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
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
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.
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