Just nu i M3-nätverket
Gå till innehåll

Göra om till vbscript


Bagendahl

Rekommendera Poster

Hej

 

Är det någon som kan hjälpa mig att göra om detta till asp vbscript?

 

Function IE600Checksum(ByVal s)
   Dim i As Integer
   Dim b(Len(s) / 2 - 1) As Integer
   Dim cs As Integer

   For i = 0 To Len(s) / 2 - 1
       b  = hexValue(s(i * 2)) * 16 + hexValue(s(i * 2 + 1))
   Next

   cs = 0
   For i = 4 To Len(s) / 2 - 2
       cs = (cs Xor b ) And &HFF
   Next

   Return cs

End Function

Function hexValue(ByVal c)
   If c >= "a" Then
       Return Asc  - Asc("a") + 10
   ElseIf c >= "A" Then
       Return Asc  - Asc("A") + 10
   Else
       Return Asc  - Asc("0")
   End If
End Function

 

Mvh

Patrick

 

Länk till kommentar
Dela på andra webbplatser

Skripet som finns är vb.net jag behöver det i gamla vbscript. Provade att göra om det men får för många fel därav att jag skulle behöva hjälp av någon duktigt som behärskar detta.

 

Mvh

Patrick

 

 

Länk till kommentar
Dela på andra webbplatser

Skripet som finns är vb.net

Till att börja med är VB.net inget scriptspråk och för det andra ser det mer ut som VB6-kod

 

Hursomhelst, det ska räcka med att du ändrar de översta raderna till följande för att det skall godkännas av VBScript

Function IE600Checksum(ByVal s)
   Dim i 
   Dim b(0)
   ReDim b(CInt(Len(s) / 2) - 1) 
   Dim cs 

 

[inlägget ändrat 2008-10-29 15:17:18 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Jag uttryckte mig lite fel, jag menade VB6 men det används väl mer i .net om jag förstått det hela rätt. Problemet är att jag måste ha in funktionen i en gammal asp sida med och det ville inte fungera.

 

Nu blev det dock bättre men jag får fortfarande ett fel som säger:

Microsoft VBScript runtime error '800a000d'

 

Type mismatch: 's'

 

/do3600.asp, line 15

 

Rad 15 är: b = hexValue(s(i * 2)) * 16 + hexValue(s(i * 2 + 1))

 

Hela koden ser ut så här nu:

Function IE600Checksum(ByVal s)
   Dim i 
   Dim b()
   ReDim Preserve b(CInt(Len(s) / 2) - 1) 
   Dim cs 

   For i = 0 To Len(s) / 2 - 1
       b  = hexValue(s(i * 2)) * 16 + hexValue(s(i * 2 + 1))
   Next

   cs = 0
   For i = 4 To Len(s) / 2 - 2
       cs = (cs Xor b ) And &HFF
   Next

   Return cs

End Function

Function hexValue(ByVal c)
   If c >= "a" Then
       Return Asc  - Asc("a") + 10
   ElseIf c >= "A" Then
       Return Asc  - Asc("A") + 10
   Else
       Return Asc  - Asc("0")
   End If
End Function

 

Vet du varför den säger "Type mismatch"

 

Mvh

Patrick

 

Länk till kommentar
Dela på andra webbplatser

Variabel s är deklarerad utan typdefintion, men används som s(i * 2), vilket jag får till en array och det kan man inte använda en variabel till om man inte explicit säger att det är en array.

 

Men nu är jag visserligen inte proffs på vare sig vbscript eller .net, så jag kan ha helt fel...

 

jag menade VB6 men det används väl mer i .net om jag förstått det hela rätt

 

Nä, VB6 har ingenting med .net att göra.

 

[inlägget ändrat 2008-10-29 19:55:14 av Mr Andersson]

Länk till kommentar
Dela på andra webbplatser

Ok. Men hur skulle det bli att deklarerad med typdefintion, mig veterligen går det bara att deklarera på asp sidor. Det skulle innebär att jag lägger till "Dim s" men detta fungerar inte heller.

 

Är det någon som kanske har en mer konkret lösning.

 

Mvh

Patrick

 

Länk till kommentar
Dela på andra webbplatser

Det skulle innebär att jag lägger till "Dim s" men detta fungerar inte heller.

 

Klart det inte funkar, variablen definieras som parameter i funktionen. Att försöka deklarera den en gång till (med dim) ger "variable already declared" eller liknande. Lägg till typen där den definieras. Men som sagt, jag är inte proffs på vbs, och är osäker på hur man gör det.

 

Sen är jag osäker på om vbscript ala ASP fixar dynamiska arrayer : Dim b(Len(s) / 2 - 1) . Jag tror man först måste "dimma" dem som statiska och sen ändra dem med "redim" eller "dim persist".

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hmm känner mig inte som nått ljushuvud på vbs heller, det tycks iallafall fungera med

Dim b()

ReDim Preserve b(CInt(Len(s) / 2) - 1)

 

det verkar just nu som det är nått med "s(i * 2)"

 

/P

 

Länk till kommentar
Dela på andra webbplatser

Är det någon annan som kan ha nått bra tips?

Som Mr Andersson redan varit inne på så måste variabeln som skickas som parameter till anropet av funktion deklareras som en array. Leta upp anropen i din kod och kontrollera hur parametervariablerna är deklarerade och posta detta.

 

Länk till kommentar
Dela på andra webbplatser

Jag har fått till detta nu:

 

 Function IE600Checksum(ByVal s)
 Dim i
 Dim b()
 ReDim Preserve b(CInt(Len(s) / 2) - 1)
 Dim cs

 For i = 0 To Len(s) / 2 - 1
               b(i) = hexValue(mid(s,i * 2 + 1,1)) * 16 + hexValue(mid(s,i * 2 + 1,1))
 Next

 cs = 0
 For i = 4 To Len(s) / 2 - 2
 cs = (cs Xor b(i)) And &HFF
 Next

 IE600Checksum = cs
End Function

Function hexValue(ByVal c)
 If c >= "a" Then
 hexValue = Asc("a") + 10
 ElseIf c >= "A" Then
 hexValue = Asc("A") + 10
 Else
 hexValue = Asc("0")
 End If
End Function

 

Jag skickar in värdet : Response.Write IE600Checksum("0002D46734A8A5AA") och skall få tillbaka "22" enligt korrekt checksum, men det är inte det jag får fram. Är det någon som känner sig som guru på detta och kan tänka sig att lista ut var felet ligger eller hjälpa mig att rätta till så att det fungerar.

 

Tackar på förhand för all hjälp

 

Länk till kommentar
Dela på andra webbplatser

hexValue-funktionen var inte korrekt, använd följande.

Function hexValue(ByVal c)
 If asc(c) >= 64 Then
    hexValue = Asc(c)-55
 Else
    hexValue = cint(c)
 End If
End Function

 

Dessutom var inte tilldelningen av b(i) korrekt. Ska se ut så här:

b(i) = hexValue(mid(s,i * 2 + 1,1)) * 16 + hexValue(mid(s,i * 2 + 2,1))

 

I övrigt fungerar koden som den är skriven, men ger förstås inte svaret 22 på ditt exempel, men detta beror enbart på din sista checksum-algoritm. Du får kolla upp med källan till koden hur denna algoritm verkligen ska se ut.

 

Något annat svar kan du inte få här, eftersom ingen vet vad det är för typ av checksumma det handlar om (sådana kan beräknas på otaliga sätt)

Men tittar man på ditt första inlägg så är det helt galet där ändå, så inte ens grundkoden hade kunnat fungera (ex. försöker man göra Len(s) på en array)

 

Åtminstone tror jag inte jag missat något annat relevant bland dina kodexempel nu, men har å andra sidan suttit i 9-timmarskurs idag och rätt degig i skallen ;)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...