Calcul du bit de parité

chris

XLDnaute Barbatruc
Bonjour

Je dois envoyer une chaîne de caractère terminé par un bit de parité (paire).

J'ai à peu près compris ce que c'est mais je cherche comment calculer ce bit de façon efficace.

Ma chaîne de 34 caractères est constituée majoritairement de chiffres plus les lettres A et B.

J'ai vu comment convertir chaque caractère en binaire et comment compter les 1 mais cela me parait peu productif comme méthode.

J'ai vu un exemple sur WINDEV où il semble exister une fonction qui fait à la fois une conversion d'un caractère en binaire et détermine la parité par un OU EXCLUSIF si cela peut aider...

S'il a des connaisseurs de ce genre de calcul, cela m'aiderait beaucoup. Merci.
 

ROGER2327

XLDnaute Barbatruc
Re : Calcul du bit de parité

Bonjour chris


Hm ! Pas de support, pas d'exemple de donnée avec le résultat souhaité...
Donc pas sûr de comprendre...

À tout hasard :​
VB:
Function BPar$(c$)
Dim i%, s&
If Len(c) Then For i = 1 To Len(c): s = s + Asc(Mid$(c, i, 1)): Next: BPar = BPar & s Mod 2
End Function
=Bpar("A3520100-1X-B61538000-000001-A-623") renvoie "0".
=Bpar("A3520100-1X-B61538000-000001-A-624") renvoie "1".​


Bonne journée.


ℝOGER2327
#7496


Jeudi 26 Tatane 141 (Saint Glé, neurologue-aliéniste - fête Suprême Quarte)
21 Thermidor An CCXXII, 0,3598h - carline
2014-W32-5T00:51:49Z
 

chris

XLDnaute Barbatruc
Re : Calcul du bit de parité

Bonjour

Merci Roger

Pour l'instant j'en suis à décoder des spécifications, très très succinctes, de protocole d'échange RS232 et le seul élément que j'ai est

"Données : chaîne de caractères ASCII-7 (20H à 7FH + 0DH, 0EH) + Parité Paire
Trame données :
Code de parité paire ou LRC : OU EXCLUSIF des caractères donnés"

Il y a aussi un exemple en WINDEV où est utilisée la fonction OUExclusifBinaire (BinaryXOR) OUExclusifBinaire (Fonction) - PC SOFT - Documentation en ligne
//Calcul du LRC sur la chaine sEnvoi toujours terminée par le chiffre 3 = code de fin de message
ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(sEnvoi,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)


Je viens de découvrir qu'il existe sur 2013 une nouvelle fonction BITOUEXCLUSIF qui semble équivalente BITOUEXCLUSIF (BITOUEXCLUSIF, fonction) - Excel.

N'étant pas très au fait de la manipulation de valeurs en binaire :confused:, je rame à décoder ce que doit être la valeur de LRC car ces fonctions ne me parlent pas…

Ta fonction correspond à ce que j'avais compris quand j'ai posté mais si je comprends bien ce que font les fonctions citées, ce n'est plus 0 ou 1 que l'on obtient.
Je pense qu'en regardant ce que font ces fonctions tu comprendras bien mieux que moi et pourras me dire si ta fonction est équivalente ou non.

De mon côté je vais voir ce que fait Excel 2013 et peut-être comprendre (???) car il faut que je puisse faire marcher cela sur 2010… et donc ton aide est bienvenue ;).

Edit : test sur 2013 : effectivement cela renvoie des nombres très variables. Si je fais par formules l'équivalent de la boucle en comparant avec la fonction BITOUEXCLUSIF les 2 codes ascii des 2 premiers caractères, puis ce résultat avec le code ascii du caractère suivant sur la chaîne 0123456789AB je passe par des valeurs diverses et termine à 2.

Donc si on peut faire l'équivalent sur 2010, par VBA je suis preneuse... Un grand merci par avance
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc

chris

XLDnaute Barbatruc
Re : Calcul du bit de parité

Bonjour

Merci Modeste Geedee

Je n'ai pas réussi à faire fonctionner MSComm sur W7 et Office 2010 sans doute un problème de DLL manquantes. Je vais retenter avec d'autres OCX...

J'ai récupéré un module de classe qui lui fonctionne bien sans besoin de DLL, ce qui est plus souple pour passer le classeur d'un PC à un autre, mais il gère juste la connexion pas le contenu de la trame.
 

chris

XLDnaute Barbatruc
Re : Calcul du bit de parité

Re

Ne cherchez plus j'ai trouvé ! Finalement XOR fait le même chose. Dès que j'ai vu bits, octets j'ai flippé et suis partie dans tous les sens mais si j'ai compris (tant que pas testé en réél ...) c'est tout bon.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia