AJUDA COM UMA FUN?ÃO

FABRICIOWEB 23/06/2016 10:59:39
#463957
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))








KERPLUNK 23/06/2016 13:05:38
#463961
a1, a2 e a3 são de que tipo? Pelo escopo do método me parecem ser tipos numéricos.
FABRICIOWEB 23/06/2016 13:07:59
#463962
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
KERPLUNK 23/06/2016 13:41:30
#463963
Os operadores [Ô]<<[Ô] e [Ô]>>[Ô] são operadores que existem no VB. Não são operadores de maior ou menor... veja aqui
FABRICIOWEB 23/06/2016 14:44:40
#463966
entao como ficaria
res = a1 + (a2 = 8) + (a3 = 16)
e isso?
OCELOT 23/06/2016 15:40:12
#463971
Resposta escolhida
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
Tópico encerrado , respostas não são mais permitidas