AJUDA COM UMA FUN?ÃO
Alguem poderia me ajuda a converter esse trecho para vb6
aqui e a função
Private Function pcsDecode(ByVal UnnamedParameter1 As a1, ByVal UnnamedParameter2 As a2, ByVal UnnamedParameter3 As a3) As [function]
Dim res As var = a1 + (a2 << 8) + (a3 << 16)
If res > &H7FFFFF Then
Return (-((Not(res) And &H7FFFFF) - 1))
End If
Return res
End Function
aqui e onde eu chamo ela
dx = pcsDecode(b(1), b(2), b(3))
dy = pcsDecode(b(5), b(6), b(7))
aqui e a função
Private Function pcsDecode(ByVal UnnamedParameter1 As a1, ByVal UnnamedParameter2 As a2, ByVal UnnamedParameter3 As a3) As [function]
Dim res As var = a1 + (a2 << 8) + (a3 << 16)
If res > &H7FFFFF Then
Return (-((Not(res) And &H7FFFFF) - 1))
End If
Return res
End Function
aqui e onde eu chamo ela
dx = pcsDecode(b(1), b(2), b(3))
dy = pcsDecode(b(5), b(6), b(7))
a1, a2 e a3 são de que tipo? Pelo escopo do método me parecem ser tipos numéricos.
são byte
eu fiz assim mas não sei se esta certo
Private Function pcsDecode(ByVal a1 As Byte, ByVal a2 As Byte, ByVal a3 As Byte) As Integer
Dim res As Integer
res = a1 + (a2 < 8) + (a3 < 16)
If res > &H7FFFFF Then
res = (-((Not (res) And &H7FFFFF) - 1))
End If
pcsDecode = res
End Function
eu fiz assim mas não sei se esta certo
Private Function pcsDecode(ByVal a1 As Byte, ByVal a2 As Byte, ByVal a3 As Byte) As Integer
Dim res As Integer
res = a1 + (a2 < 8) + (a3 < 16)
If res > &H7FFFFF Then
res = (-((Not (res) And &H7FFFFF) - 1))
End If
pcsDecode = res
End Function
Os operadores [Ô]<<[Ô] e [Ô]>>[Ô] são operadores que existem no VB. Não são operadores de maior ou menor... veja aqui
entao como ficaria
res = a1 + (a2 = 8) + (a3 = 16)
e isso?
res = a1 + (a2 = 8) + (a3 = 16)
e isso?
Se o número é um inteiro então o BitShift pode ser feito por multiplicação
a2 << 8 vai ter o mesmo resultado que
a2 * (2 ^ 8) ou simplesmente
a2 * 256
a3 << 16 vai ter o mesmo resultado que
a3 * (2 ^ 16) ou simplesmente
a2 * 65536
Então no seu caso poderia usar uma das seguintes formas
res = a1 + (a2 * 256) + (a3 * 65536)
res = a1 + (a2 * (2 ^ 8)) + (a3 * (2 ^ 16))
Só que o seu res e o retorno da função deve ser um Long, o Integer não tem tamanho suficiente para ele
a2 << 8 vai ter o mesmo resultado que
a2 * (2 ^ 8) ou simplesmente
a2 * 256
a3 << 16 vai ter o mesmo resultado que
a3 * (2 ^ 16) ou simplesmente
a2 * 65536
Então no seu caso poderia usar uma das seguintes formas
res = a1 + (a2 * 256) + (a3 * 65536)
res = a1 + (a2 * (2 ^ 8)) + (a3 * (2 ^ 16))
Só que o seu res e o retorno da função deve ser um Long, o Integer não tem tamanho suficiente para ele
Tópico encerrado , respostas não são mais permitidas