Checksum - Pb dépassement capacité variable

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 :

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

4 réponses

  1. Bonjour,

    en gros l'algorithme est un checksum se réduisant à :

    Tant que buff contient des caractères
    var1=var0*31+car
    var0=var1
    Loop

    (car est la valeur décimale du caractère)

    Le soucis étant que les variables var1 et var0 sont vite surchargées.

    Cordialement dede38440
    1. Bonjour

      Alors, avec mes faible connaissances je bloque.
      L'évolution de buff?

      cordialement
      1. 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
        1. 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