voici la fonction que j'utilise dans un de mes programmes... la valeur dont il faut calculer le crc est dans text1,
on affiche ensuite le crc, poid faible-poid fort dans crcval
'capture d'une chaine et transformation en héxa
texte$ = Text1.Text
tailletxt = Len(texte$) 'Text1.Text)
ReDim tabl(tailletxt \ 2)
Call texttohex(Len(texte$), texte$)
'///////////////////////////////////////////////
'calcul du CRC
Call calcul_crc(nboctets)
'////////////////////////////////////////////////
'inversion poid fort / poid faible du CRC pour l'envoi
a = crc And &HFF
b = crc And &HFF00
b = b \ &H100
a = a * &H100
crc = a + b
crcval.Text = Hex(crc)
'////////////////////////////////////////////////
' transformation du texte en hexa...
Sub texttohex(tailletext As Integer, texte As String)
texte = UCase(texte)
Dim valeurs()
ReDim valeurs(tailletext)
For i = 1 To tailletext
car = Mid(texte, i, 1)
Select Case car
Case "0"
valeurs(i) = &H0
Case "1"
valeurs(i) = &H1
Case "2"
valeurs(i) = &H2
Case "3"
valeurs(i) = &H3
Case "4"
valeurs(i) = &H4
Case "5"
valeurs(i) = &H5
Case "6"
valeurs(i) = &H6
Case "7"
valeurs(i) = &H7
Case "8"
valeurs(i) = &H8
Case "9"
valeurs(i) = &H9
Case "A"
valeurs(i) = &HA
Case "B"
valeurs(i) = &HB
Case "C"
valeurs(i) = &HC
Case "D"
valeurs(i) = &HD
Case "E"
valeurs(i) = &HE
Case "F"
valeurs(i) = &HF
Case Else
MsgBox ("Erreur dans la chaîne à envoyer")
End Select
Next i
pb.Value = 0
pb.Max = tailletext \ 2 + 10
nboctets = tailletext \ 2
compteur = 0
For i = 1 To tailletext Step 2
tabl(compteur) = valeurs(i) * &H10 + valeurs(i + 1)
compteur = compteur + 1
Next i
End Sub
' calcul du CRC à proprement parler
Sub calcul_crc(n As Integer)
Const polynome_generateur = 40961 '&HA001
Dim bit As Integer
crc = 65535 ' &hffff CRC est une variable globale de type string déclarée dans un module
For i = 0 To n - 1 ' n étant le nombre d'octets à traiter
crc = crc Xor tabl(i) ' tabl() est le tableau contenant les différents octets à prendre en compte dans le calcul du CRC ... déclaré en global dans un module, il est de type string
For j = 0 To 7
bit = crc And 1 ' masquage pour garder le bit n°0
crc = crc \ 2 ' décalage vers la droite de 1 ... \ permet une division entière
crc = crc And 32767 '&H7FFF masquage pour obtenir un décalage logique
If bit Then crc = crc Xor polynome_generateur
Next j
Next i
End Sub
je déclare ceci dans un module :
Public crc As String
Public tabl() As String
Public nboctets As Integer
en espérant que cela t'aide !
ensuite, je suppose que tu voudras envoyer des chaines vers ton automate... si tu y arrives (surtout si tu réussis à lire la réponse;) explique moi comment tu fais... car je n'y suis pas encore parvenu !