Checksum - Pb dépassement capacité variable
dede38440
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
dede38440 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
dede38440 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
je programme en ce moment une application en Visual Basic qui nécessite un checksum (calculé à partir d'une chaîne de caractères allant de 4 à une 20ène de caractères) que voici :
Mon soucis est que les variables v30 et v29 saturent rapidement suivant le nombre de caractère; même en les passant en Double ou Long les variables saturent.
En C++, C et C# ça fonctionne comme sur des roulettes donc je ne comprends pas pourquoi pas en VB.. Code en C# (fonctionne) :
J'ai longuement cherché et ai pensé qu'étant donné qu'à la fin on fait un modulo 8 sur la somme, je pouvais tronquer les parties binaires et gardé ainsi que les 5 premiers chiffres binaires pour continuer l'algorithme; ce fut un échec.
J'espère avoir été suffisamment clair sinon je me réexpliquerai si le besoin est.
Merci par avance, je suis ouvert à toutes idées
je programme en ce moment une application en Visual Basic qui nécessite un checksum (calculé à partir d'une chaîne de caractères allant de 4 à une 20ène de caractères) que voici :
variableT = TextBox6.Text Dim buff() = System.Text.Encoding.ASCII.GetBytes(variableT.ToLower() + "0") Dim v3 As Integer = 0 Dim v30 As Integer = 0 Dim v31 As Integer = 0 Dim v29 As Integer = 0 If buff(0) <> 0 Then While buff.Length - 1 <> v30 v3 = buff(v30) v31 = (v29 << 5) - v29 + v3 v30 += 1 v3 = buff(v30) v29 = v31 End While If v31 < 0 Then v29 = -v31 End If End If Dim v32 As Integer = v29 Mod 8 Msgbox(v32)
Mon soucis est que les variables v30 et v29 saturent rapidement suivant le nombre de caractère; même en les passant en Double ou Long les variables saturent.
En C++, C et C# ça fonctionne comme sur des roulettes donc je ne comprends pas pourquoi pas en VB.. Code en C# (fonctionne) :
byte[] buff = System.Text.Encoding.ASCII.GetBytes(variableT.ToLower() + "0"); int v3 = 0; int v30 = 0; int v31 = 0; int v29 = 0; if (buff[0] != 0) { while (buff.Length - 1 != v30) { v3 = buff[v30]; v31 = v29 << 5; v31 -= v29; v31 += v3; v30++; v3 = buff[v30]; v29 = v31; } if (v31 < 0) v29 = -v31; } int v32 = v29 % 8; return v32;
J'ai longuement cherché et ai pensé qu'étant donné qu'à la fin on fait un modulo 8 sur la somme, je pouvais tronquer les parties binaires et gardé ainsi que les 5 premiers chiffres binaires pour continuer l'algorithme; ce fut un échec.
J'espère avoir été suffisamment clair sinon je me réexpliquerai si le besoin est.
Merci par avance, je suis ouvert à toutes idées
A voir également:
- Checksum - Pb dépassement capacité variable
- Test capacité pc - Guide
- Md5 checksum - Télécharger - Web & Internet
- Dépassement de capacité vba ✓ - Forum Excel
- Dépassement de capacité VBA ✓ - Forum VB / VBA
- Créer un compte yahoo mail gratuit avec capacité de - Télécharger - Mail
4 réponses
Bonjour
Chez moi
Dim v3 As Integer = 0
ne fonctionne pas
mais
Dim v3 As Integer
v3 = 0
oui
Et tout passer en variant, pour voir ce qu'a choisi Vba ?
Cordialement
c'est peu
Chez moi
Dim v3 As Integer = 0
ne fonctionne pas
mais
Dim v3 As Integer
v3 = 0
oui
Et tout passer en variant, pour voir ce qu'a choisi Vba ?
Cordialement
c'est peu
Bonjour, merci pour l'aide.
Le soucis de déclaration de variable doit dépendre de la version; donc pas de soucis à ce niveau là.
J'ai donc testé de passé les variables en Variant (ou Object suivant les versions), l'algorithme fonctionne lorsque j'ai 6 caractères en entrée (la variable Variant est alors associée à une de type Long), au delà l'algorithme ne fonctionne plus (la variable Variant est associée à une de type LongLong).
Cordialement dede38440
Le soucis de déclaration de variable doit dépendre de la version; donc pas de soucis à ce niveau là.
J'ai donc testé de passé les variables en Variant (ou Object suivant les versions), l'algorithme fonctionne lorsque j'ai 6 caractères en entrée (la variable Variant est alors associée à une de type Long), au delà l'algorithme ne fonctionne plus (la variable Variant est associée à une de type LongLong).
Cordialement dede38440