# Checksum du mode natif

Le checksum utilisé par les commandes de transfert de fichiers du mode natif est un Contrôle de redondance cyclique (CRC) standard de 16 bits. L’algorithme de calcul du CRC est indiqué ci-après. Dans cet exemple, la variable CRC est à 16 bits non signés et l’octet d’entrée est 8 bits.

1. Réglez le CRC sur 0.
2. Prenez l’octet suivant dans le flux de données.

3. Testez le bit de CRC le plus représentatif et l’octet d’entrée, puis procédez comme suit :

   S’ils sont égaux, décalez le CRC d’un cran à gauche.

   Si un bit est 0 et l’autre 1, décalez le CRC d’un cran à gauche et XOR avec 4129.

4. Décalez l’octet d’entrée à gauche.
5. Si vous n’avez pas décalé l’octet d’entrée 8 fois, poursuivez à l’étape 3.
6. S’il reste des octets dans le flux de données, poursuivez à l’étape 2.

Vous pouvez trouver une explication théorique de cet algorithme dans « Numerical Recipes in C:The Art of Scientific Computing ».1 Press, William H., et al. Cambridge, MA: Cambridge University Press, 1992, 896-901.
Une fonction C qui calcule le CRC bit par bit est indiquée ci-après :

    unsigned short CalculateCRC(char* buffer, int size)
    {
      unsigned short cword = 0;
      unsigned short ch;
      int i,j;
      for (i = 0; i < size; i++) {
        ch = buffer[i] << 8;
        for (j = 0; j < 8; j++) {
          if ((ch & 0x8000) ^ (cword & 0x8000)) {
            cword = (cword << 1) ^ 4129;
          }
          else {
            cword <<= 1;
          }
          ch <<= 1;
        }
      }
      return cword;
    }

Le système de vision calcule le checksum d’un fichier transféré à l’aide des valeurs en caractères ASCII du contenu du fichier codé en hexadécimal. Par exemple :

Contenu du fichier | 0xAB 0xCD 0xEF 0x01
Représentation ASCII | ABCDEF01
Valeurs des octets à vérifier | 0x41 0x42 0x43 0x44 0x45 0x46 0x30 0x31

Cet encodage pour les transferts de fichiers sur les commandes du mode natif ajoute une séquence de retour chariot et de saut de ligne tous les 80 caractères visibles.