Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Przesunięcie bitowe w VB
misiaq87




Typ: neutral
Postów: 8
Zarejestrowany: Jun 2004
Przesunięcie bitowe w VB

Witam!

Mam pewien problem: w jaki sposób w VB wykonać operację przesunięcia bitowego w lewo/ w prawo
(w języku C: << lub >>? Czy jest na to wogóle jakiś sposób? Próbuje "przerobić" funkcję obliczającą Hash'a napisaną w C dostępną pod adresem(http://dev.null.pl/ekg/docs/protocol.html#ch1.3) na VB. Wszystko opracowałem za pomocą operatorów Xor, And, Or... oprócz przesuwania :/ Proszę o pomoc i pozdrawiam!

03-03-2005 17:35
Pokaż profil misiaq87  Wyślij email do misiaq87        3734618
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Przykład z vbfaq

Public Function LShift(ByVal lThis As Long, ByVal lBits As Long) As Long
    If (lBits <= 0) Then
      'błędny parametr ...
      LShift = lThis
    ElseIf (lBits > 31) Then
      'błędny parametr ...
      LShift = 0
    Else
      If (lThis And (2 ^ (31 - lBits))) = (2 ^ (31 - lBits)) Then
        LShift = (lThis And (2 ^ (31 - lBits) - 1)) * (2 ^ lBits) Or &H80000000
      Else
        LShift = (lThis And (2 ^ (31 - lBits) - 1)) * (2 ^ lBits)
      End If
    End If
  End Function

  Public Function RShift(ByVal lThis As Long, ByVal lBits As Long) As Long
    If (lBits <= 0) Then
      'błędny parametr ...
      RShift = lThis
    ElseIf (lBits > 31) Then
      'błędny parametr ...
      RShift = 0
    Else
      If (lThis And &H80000000) = &H80000000 Then
        RShift = (lThis And &H7FFFFFFF) \ (2 ^ lBits) Or (2 ^ (31 - lBits))
      Else
        RShift = lThis \ (2 ^ lBits)
      End If
    End If
  End Function


Już był temat (mój) w którym Marcin_an postanowił to przepisać, ale od jakiegoś czasu słychać o gg 7, w którym najprawdopodobniej zostanie użyta inna procedura hashująca.


_____________________________________________
www.mob.abc.pl - moja strona o VB

03-03-2005 18:59
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
misiaq87




Typ: neutral
Postów: 8
Zarejestrowany: Jun 2004
Dzięki wielkie!

Wielkie dzięki za te funkcje! Jednak wciąż mam problem: Już podczas wykonywania drugi raz pętli (i=1) występuję błąd "Overflow" przy drugiej operacji "y = y Xor x". Jak to ominąć? W języku C wartość y przyjmuje wtedy wartość ujemną...


Private Function GetHash(haslo As String, seed As String) As String

Dim x, y, z As Variant

x = 0
    y = Hex2Dec(seed)

    GetHash = ""
    For i = 0 To Len(haslo) - 1

        x = (x And &HFFFFFF00) Or Asc(Mid(haslo, i + 1, 1))

        y = y Xor x
       
        y = y + x
     

        x = LShift(x, 8)
 

        y = y Xor x
       
        x = LShift(x, 8)
 
        y = y - x
       
        x = LShift(x, 8)
 
        y = y Xor x
 
        z = y And &H1F
       
        y = LShift(y, z) Or RShift(y, (32 - z))

    Next i
   
    GetHash=Hex(y)

End Function

03-03-2005 19:41
Pokaż profil misiaq87  Wyślij email do misiaq87        3734618
VBija




Typ: neutral
Postów: 56
Zarejestrowany: Mar 2003

mi udało się napisać tę funkcję
moge się zacoś ciekawego wymienić kodami
pisz najlepiej na albo gg 2647002, na to forum nie regularnie zaglondam.


_____________________________________________
zobacz moją stronę http://vbija.prv.pl/
Andrzej Wodyński

04-03-2005 09:58
Pokaż profil VBija  Wyślij email do VBija   Odwiedź stronę VBija       2647002
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Tak, miałem napisać, ale projekt wspólnego multikomunikatora padł i jakoś nie napisałem .Z tego co pamiętam, problem leżał w tym, że w VB nie ma typu danych, który odpowiadałby temu z C w tym kodzie. Jeśli nadal jest potrzebne - mogę to napisać.

VBija - a mógłbyś poprostu wrzucić to na forum? Więcej osób z tego skorzysta niż jeśli masz wysyłać tylko do jednej - i byłoby szybciej nawet.

___
Dotarły poza tym do mnie informacje, że ktoś ma zamiar wydać bibliotekę obsługującą protokół GG. Byćmoże nawet będzie to wersja 6.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

04-03-2005 20:18
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1