OVH Cloud OVH Cloud

Pb de variable type icompatible

2 réponses
Avatar
Jingle
Bonjour,

J'ai un petit probl=E8me.
Je fais une programme pour dialoguer avec un micro par le=20
port serie. J'ai cr=E9=E9 ma propre checksum. elle est un peu=20
bizarre j'aditionne tout les quartets entre eux pour en=20
faire ma checksum.

j'ai: entree,application,charge,sortie,etat,check As=20
string=20


check =3D Val("&H" + Mid(entree, 1, 1)) + Val("&H" + Mid
(entree, 2, 1)) + Val("&H" + Mid(entree, 3, 1)) + Val("&H"=20
+ Mid(entree, 4, 1)) + Val("&H" + Mid(application, 1, 1))=20
+ Val("&H" + Mid(application, 2, 1)) + Val("&H" + Mid
(charge, 1, 1)) + Val("&H" + Mid(charge, 2, 1)) + Val("&H"=20
+ Mid(sortie, 1, 1)) + Val("&H" + Mid(sortie, 2, 1)) + Val
("&H" + Mid(sortie, 3, 1)) + Val("&H" + Mid(sortie, 4, 1))
+ Mid(etat, 1, 1)) + Val("&H" + Mid(etat, 2, 1))

le resulstat que j'obtient par ce calacul correspond a la=20
valeur en hexa mais sans le &H.
mon probleme est le suivant:
si je mets check =3D "&H" + val("&H".....) il me sort une=20
erreur de type incompatible.

Ps check =3D Hex(val(....)) ne me convient pas puisque avec=20
cette instruction je convertis ce chiffre en hexa.

Merci de votre aide.

2 réponses

Avatar
Zoury
Salut Jingle! :O)

Je fais une programme pour dialoguer avec un micro par le
port serie. J'ai créé ma propre checksum. elle est un peu
bizarre j'aditionne tout les quartets entre eux pour en
faire ma checksum.



J'ai rien compris! :O))
je ne connais rien en audio... mais le problème n'est pas la alors tant
pis..

entree,application,charge,sortie,etat,check As string



si tu a déclaré tes variables tel quel, soit :
'***
Dim entree, application, charge, sortie, etat, check As string
'***

alors toutes les variables sont déclarées As Variant sauf la dernière qui
est As String.. tu dois *abosolument* spécifié le type pour chacune d'entre
elle. Aussi Check étant une valeur numérique vaudrait mieux la déclarée
comme telle :
'***
Dim entree As string, application As string, charge As string, sortie As
string, etat As string, check As Long
'***


check = Val("&H" + Mid(entree, 1, 1)) + Val("&H" + Mid


<snip>
si je mets check = "&H" + val("&H".....) il me sort une
erreur de type incompatible.



Le symbole de concaténation de chaine utilisé devrait toujours la perluette
&. Le plus + fonctionne, mais comme tu l'as remarqué il peut causer des
conflits de type car VB ne peut toujousr deviner si tu souhaite convertir le
texte en nombre afin de l'addition ou l'inverse.. (et **surtout** si tes
variables sont déclarées As Variant comme ça semble être le cas..)

on obtiens donc :

<non testé>
'***
check = Val("&H" & Mid$(entree, 1, 1)) + _
Val("&H" & Mid$(entree, 2, 1)) + _
Val("&H" & Mid$(entree, 3, 1)) + _
Val("&H" & Mid$(entree, 4, 1)) + _
Val("&H" & Mid$(application, 1, 1)) + _
Val("&H" & Mid$(application, 2, 1)) + _
Val("&H" & Mid$(charge, 1, 1)) + _
Val("&H" & Mid$(charge, 2, 1)) + _
Val("&H" & Mid$(sortie, 1, 1)) + _
Val("&H" & Mid$(sortie, 2, 1)) + _
Val("&H" & Mid$(sortie, 3, 1)) + _
Val("&H" & Mid$(sortie, 4, 1)) + _
Val("&H" & Mid$(etat, 1, 1)) + _
Val("&H" & Mid$(etat, 2, 1))
'***

Note l'utilisation de Mid$() au lieu de Mid().. la première renvoit et
travaille avec des String alors que la seconde renvoit et travaille avec des
Variant ce qui est plus lent..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Jinlge
Salut,

C'est juste pour te remercier car c'est super cela marche.
et juste pour te preciser que dans micro j'entendais
microcrontrolleur.

voila.

Encore merci