VB/VB.Net Aide pour une traduction

Inscrit
17 Avril 2015
Messages
119
Reactions
0
#1
Bonjours,

J'arrive maintenant à gérer la connexion en socket, à l'exception d'une chose : FlashKey.
On ma montrer ou se trouver le code as3. J'ai donc traduit 2 fonction sur 3. C'est la le problème.
Pour que cela sois plus claire je vais tout vous donner:
Code:
Private Sub RandomKey()
        Dim KEY_SIZE As UInteger = 21
        Dim _loc1_ As String = ""
        Dim _loc2_ As Long = KEY_SIZE - (1 + 3)
        Dim _loc3_ As Long = 0
        While (_loc3_ < _loc2_)
            _loc1_ = _loc1_ + getRandomChar()
            _loc3_ += 1
        End While
        ' Return _loc1_ + checksum(_loc1_)
    End Sub

    Private Function getRandomChar()
        Dim _loc1_ As Long = Math.Ceiling(Rnd() * 100)
        If _loc1_ <= 40 Then
            Return String.Format(Math.Floor(Rnd() * 26) + 65)
        End If
        If _loc1_ <= 80 Then
            Return String.Format(Math.Floor(Rnd() * 26) + 97)
        End If
        Return String.Format(Math.Floor(Rnd() * 10) + 48)
    End Function

Voila donc les 2 fonctions traduite.
Il reste une autre :
JavaScript:
 private static function checksum(param1:String) : String
 private static var hex_chars:Array = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
      {
         var _loc2_:Number = 0;
         var _loc3_:Number = 0;
         while(_loc3_ < param1.length)
         {
            _loc2_ = _loc2_ + param1.charCodeAt(_loc3_) % 16;
            _loc3_++;
         }
         return hex_chars[_loc2_ % 16];
      }

Voila donc la fonction ou je bloque. Si une personne pourrais me donner un coup de pouce je dis pas non !

Voici ma fonction que j'ai essayer de traduire :
Code:
    Private Function checksum(param1 As String)
        Dim _loc2_ As Long = 0
        Dim _loc3_ As Long = 0
        While _loc3_ < param1.Count
            _loc2_ = _loc2_ + param1
            _loc3_ += 1
        End While
        Return
    End Function

Merci
 
Inscrit
2 Juin 2016
Messages
82
Reactions
3
#2
D'après ce que j'ai compris, ca serait quelque chose comme ca :
C#:
        private static char[] _hex =
            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        public static char checksum(string str)
        {
            var ret = 0;
            foreach (var c in str)
            {
                ret += int.Parse(c.ToString(), System.Globalization.NumberStyles.HexNumber) % 16;
            }
            return _hex[ret%16];
        }
Source:
http://stackoverflow.com/questions/994459/getting-unicode-string-from-its-code-c-sharp
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html#charCodeAt()

Je précise que c'est fait à l'aveugle, seul des tests te diront si c'est la bonne implémentation même si j'ai des doutes.

PS : le code est vraiment dégueulasse, pardon :(
 

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#3
Tu as tout devant les yeux.. créé ton tableau hex_char, puis
Code:
            _loc2_ = _loc2_ + param1.charCodeAt(_loc3_) % 16;
De tête la fonction du framework .Net a le même nom j'ai pas de quoi vérifier là. Donc c'est très simple à traduire ...

Puis
Code:
return hex_chars[_loc2_ % 16];
Bah écoute tu ctrl+c ctrl+v c'est gratos quoi
Good Luck !
 
Inscrit
17 Avril 2015
Messages
119
Reactions
0
#4
Alors merci déjà.
Voila ce que j'ai traduit :
Code:
 Private Shared _hex As Char() = {"0"c, "1"c, "2"c, "3"c, "4"c, "5"c,
    "6"c, "7"c, "8"c, "9"c, "A"c, "B"c,
    "C"c, "D"c, "E"c, "F"c}

    Public Shared Function RandomKey()
        Dim KEY_SIZE As UInteger = 21
        Dim _loc1_ As String = ""
        Dim _loc2_ As Long = KEY_SIZE - (1 + 3)
        Dim _loc3_ As Long = 0
        While (_loc3_ < _loc2_)
            _loc1_ = _loc1_ + getRandomChar()
            _loc3_ += 1
        End While
        Return _loc1_ + checksum(_loc1_)
    End Function

    Private Shared Function checksum(param1 As String)
        Dim _loc2_ As Long = 0
        While _loc2_ < param1.Count
            _loc2_ += Integer.Parse(param1.ToString(), System.Globalization.NumberStyles.HexNumber) Mod 16
        End While
        Return _hex(_loc2_ Mod 16)
    End Function

    Private Shared Function getRandomChar()
        Dim _loc1_ As Long = Math.Ceiling(Rnd() * 100)
        If _loc1_ <= 40 Then
            Return String.Format(Math.Floor(Rnd() * 26) + 65)
        End If
        If _loc1_ <= 80 Then
            Return String.Format(Math.Floor(Rnd() * 26) + 97)
        End If
        Return String.Format(Math.Floor(Rnd() * 10) + 48)
    End Function
Maintenant j'ai un autre problème, dans le checksum(), à la ligne
Code:
            _loc2_ += Integer.Parse(param1.ToString(), System.Globalization.NumberStyles.HexNumber) Mod 16
Une erreur: La valeur était trop grande ou trop petite pour un Int32.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Aïe aïe aïe j'ai mal aux yeux avec tous ces locs o_O

Pourquoi ne pas parser en Long comme le type de la variable _loc2_ ?

 
Inscrit
2 Juin 2016
Messages
82
Reactions
3
#6
Aïe aïe aïe j'ai mal aux yeux avec tous ces locs o_O

Pourquoi ne pas parser en Long comme le type de la variable _loc2_ ?

Bien vu, j'ai mal fait la transition. Ca devrait corriger le problème
 
Dernière édition par un modérateur:
Inscrit
17 Avril 2015
Messages
119
Reactions
0
#7
Malheureusement non ma valeur obtenue dépasse très largement.

"1101048584557555904851116801041137256122"
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#8
Vous avez essayé de comprendre le code au lieu de "traduire" comme des débiles ?
En même temps même le code de ankama est merdique…
Sous réserve que le VB soit correct (Python ! Je ne mange pas de ce pain-là) :

Code:
_loc2_ = (_loc2_ + Integer.Parse(param1.ToString(), System.Globalization.NumberStyles.HexNumber)) Mod 16
 
Inscrit
17 Avril 2015
Messages
119
Reactions
0
#9
Je tiens à te remercier de vouloire m'aider, mais suite à la modification avec ton code, j'ai toujours la même erreur. Je pense plutôt que cela viens de mon getRandomChar().
Merci
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#10
Si ton code ressemble à
Code:
    Private Shared Function checksum(param1 As String)
        Dim _loc2_ As Long = 0
        While _loc2_ < param1.Count
            _loc2_ = (_loc2_ + Integer.Parse(param1.ToString(), System.Globalization.NumberStyles.HexNumber)) Mod 16
        End While
        Return _hex(_loc2_ Mod 16)
    End Function
Ce n'est pas étonnant, il boucle. Où est passée _loc3_ ?
 
Inscrit
17 Avril 2015
Messages
119
Reactions
0
#11
Non cela ressemble à sa :
Code:
    Private Shared Function checksum(param1 As String)
        Dim _loc2_ As Long = 0
        Dim _loc3_ As Long = 0
        While _loc3_ < param1.Count
            _loc2_ = (_loc2_ + Long.Parse(param1.ToString(), System.Globalization.NumberStyles.HexNumber)) Mod 16
            _loc3_ += 1
        End While
        Return _hex(_loc2_ Mod 16)
    End Function
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#12
Bah oui c'est logique ! Il faut évidemment lire caractère par caractère :
Code:
    Private Shared Function checksum(param1 As String)
        Dim _loc2_ As Long = 0
        Dim _loc3_ As Long = 0
        While _loc3_ < param1.Count
            _loc2_ = (_loc2_ + int.Parse(param1[_loc3_].ToString(), System.Globalization.NumberStyles.HexNumber)) Mod 16
            _loc3_ += 1
        End While
        Return _hex(_loc2_)
    End Function
Je suis pas sûr des fonctions, je n'ai jamais touché au VB, mais c'est normal qu'il y ait un overflow : tu essayes de convertir directement tout param1 !
 
Inscrit
17 Avril 2015
Messages
119
Reactions
0
#13
J'ai apporter quelque modification est cela fonctionne dans le sens qu'il n'y à pas d'erreur maintenant la clef que je reçois et simplement une suite de chiffre et de lettre mélangé, je cherche pour le moment.
 
Haut Bas