IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Traduction d'un programme C en VBA (Algorithme CRC 8 bits) [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de lerico
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 115
    Points : 90
    Points
    90
    Par défaut Traduction d'un programme C en VBA (Algorithme CRC 8 bits)
    Bonjour à tous,

    Je fais appel à vos connaissances pour traduire un programme en langage C vers du vba.
    Certaines fonctions de ce programme me sont inconnues et je peine à le faire fonctionner sous Access.

    Le principe est de calculer sur 18 caractères, le crc 8 bits polynôme 0x91, en base 10 (0 -> 255 => 3 chiffres).

    Exemple : 300314120242907650 résultat du calcul 048

    Voici le code en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    const unsigned char CRC7_POLY = 0x91;
     
    unsigned char getCRC(unsigned char message[], unsigned char length)
    {
     unsigned char i, j, crc = 0;
     
       for (i = 0;i < length; i++)
       {
             crc ^= message[i];
             for (j = 0;j < 8; j++)
             {
                   if (crc & 1)crc ^= CRC7_POLY;
                   crc >>= 1;
              }
        }
        return crc;
    }
    En vba cela pourrait donner cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function CRC (Message as String, Longueur_a_coder as long)
    Dim i,j as Long
    
    CRC=0
    
    For i=1 to  Longueur_a_coder
        CRC=CRC xor Message(i)
        For j=1 to 8
              if le bit de poids faible de CRC est à 1 then
                     CRC=CRC xor 0x91 ou exclusif bit à bit
                     Décaler les bits de CRC de 1 bit à droite // division entière par 2
              end if
        Next j
    Next i
    CRC=CRC
    Je n'arrive pas à traduire la partie en italique. Pouvez-vous m'apporter une aide sur ce sujet ?

    Merci.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut CRC
    Bonjour,
    le code pourrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    crc = crc xor &h91
    crc = crc \ 2

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Je suis d'accord avec Helas.
    Je vois la fonction comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Function getCRC(message As String, length As Long) As Byte
    Const CRC7_POLY As Long = &H91
    Dim crc As Long
    Dim i As Long, j As Long
    Dim OneChar As Long
     
    crc = 0
    For i = 1 To length
        OneChar = Asc(Mid(message, i, 1))
        crc = crc Xor OneChar
        For j = 0 To 7
            If (crc And 1) = 1 Then crc = crc Xor CRC7_POLY
              crc = crc \ 2
        Next
    Next
     
    getCRC = CByte(crc)
    End Function
    Test de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub testGetCRC()
    Dim s As String
    Dim crc As Byte
     
    s = "300314120242907650"
    crc = getCRC(s, Len(s))
    Debug.Print crc & " (0x" & Hex(crc) & ")"
     
    End Sub
    Cela me donne 48.

    A+

  4. #4
    Membre régulier Avatar de lerico
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 115
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Un grand merci à vous deux.
    Je vais effectuer d'autres tests mais je pense que c'est du tout bon.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traduction de formule d'Excel vers VBA
    Par emi3113 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2008, 20h15
  2. Programmation Objet en VBA
    Par -={-_-}=- dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2008, 18h59
  3. [Objets] La programmation Objet et VBA
    Par seb92400 dans le forum Sondages et Débats
    Réponses: 75
    Dernier message: 09/11/2007, 00h35
  4. Traduction d'un programme TCL en C
    Par acik59 dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 02/07/2007, 17h37
  5. Exécuter un programme Fortran depuis VBA ?
    Par zerbault dans le forum Fortran
    Réponses: 1
    Dernier message: 08/01/2007, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo