begin process at 2012 05 29 05:29:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Explication Code C -> Vb


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Explication Code C -> Vb

mercredi 12 avril 2006 à 13:06:55 | Explication Code C -> Vb

akuvido

Bonjour,

Je dois pour une communication entre PC et automate analysé un protocole.
En l'analysant je me suis rendu compte que il y avais des CRC's ( verification de trame par ajout d'octet en fin de trame ).

J'ai alors demandé au constructeur de l'apareil la maniere de calculer le crc.

Celui ci m'as alors fourni les codes suivant :
Il y en 2 car il y a deux type de Crc sont utilisé

CRC 8 :

unsigned char calcHeaderCRC (unsigned char datavalue, unsigned char crcvalue)
{
             Unsigned int crc;

    crc = crcvalue ^ datavalue;
    crc = crc ^ (crc<<1) ^ (crc<<2) ^ (crc<<3) ^ (crc<<4) ^ (crc<<5) ^ (crc<<6) ^ (crc<<7) ;

    return (crc & Oxfe) ^((crc<<8) & 1);
}

CRC 16 :

unsigned int calcdataCRC (unsigned char datavalue, unsigned char crcvalue)
{
             Unsigned int crclow;

    crclow = (crcvalue & 0xff) ^ datavalue;
    return ((crcvalue>>8) ^ (crclow<<8) ^ (crclow<<3) ^ (crclow<<12) ^ (crclow>>4) ^ (crclow & 0x0f) ^ ((crclow & 0x0f)<<7)) ;

}

Malheusement pour moi, J'ignore totalement le Language C car je dois pour se projet travailler en Visual basic.

J'aurai voulu savoir si il y avais ame charitable qui pourrais m'expliquer le fonctionnement de ce code pour que je puisse alors le traduire en Visual basic.


Apres quelque recherche, j'ai pu comprendre que le ^ est un Ou exclusif , le & un ET binaire et >>X sont des decalage de bits et que le X est le "nombre" de rang du decalage et le sens des > le sens du decalage.

Voila merci infiniment !



mercredi 12 avril 2006 à 19:20:18 | Re : Explication Code C -> Vb

BruNews

Administrateur CodeS-SourceS
VB ignore les décalages de bits.
Mets cela dans une dll C que tu appelleras depuis ton VB.

ciao...
BruNews, MVP VC++
jeudi 13 avril 2006 à 09:24:35 | Re : Explication Code C -> Vb

ymca2003

si VB connait pas les décalages de bits avec des divisions et multiplications devrait passer non ?

crc>>1 <=> cr/2
crc>>2 <=> cr/4
crc>>3 <=> cr/8
crc>>4 <=> cr/16
crc>>5 <=> cr/32
crc>>6 <=> cr/64
crc>>7 <=> cr/128
crc>>8 <=> crc/256

crc<<1 <=> crc*2
crc<<2 <=> crc*4
crc<<3 <=> crc*8
crc<<4 <=> crc*16
crc<<5 <=> crc*32
crc<<6 <=> crc*64
crc<<7 <=> crc*128
crc<<8 <=> crc*256

& <=> And
^ <=> Xor

J'espère que VB connait And et Xor.

 
jeudi 13 avril 2006 à 09:34:30 | Re : Explication Code C -> Vb

akuvido

Merci de ton aide, Quelqu'un m'a deja proposé ca, et j'en suis arrivé à ca ... unsigned char calcHeaderCRC (unsigned char datavalue, unsigned char crcvalue) { Unsigned int crc; crc = crcvalue ^ datavalue; crc = crc ^ (crc<<1) ^ (crc<<2) ^ (crc<<3) ^ (crc<<4) ^ (crc<<5) ^ (crc<<6) ^ (crc<<7) ; return (crc & Oxfe) ^((crc<<8) & 1); } devient public function calcHeaderCRC (datavalue as integer, crcvalue as integer) as integer dim crc as integer crc = crcvalue xor datavalue crc = crc xor (crc *2) xor (crc*4) xor (crc*8) xor (crc*16) xor (crc*32) xor (crc*64) xor (crc *128) calcHeaderCRC = (crc and &HFE) Xor ((crc * 256) And 1) end function mais mon probleme se situe autre part maintenant car vu le nombre de multiplication, j'arrive a un overflow a tout les coups ! J'aurai voulu savoir si sous C ce probleme est egalement present. Merci de votre aide
jeudi 13 avril 2006 à 10:23:00 | Re : Explication Code C -> Vb

BruNews

Administrateur CodeS-SourceS
C'est spécifique aux langages interprétés l'overflow en rapport au type de variable.

Remplacer des shift par 8 divisions et autant de multiplications, bouhhh faudra pas être pressé !!!

ciao...
BruNews, MVP VC++
jeudi 13 avril 2006 à 10:50:25 | Re : Explication Code C -> Vb

ymca2003

en passant par des unsigned long pour faire les calculs peut-être

mais clair qu'en C c'est plus rapide ce genre de truc.

VB optimize même pas un minimun derrière les multiplication/division de puissance de 2 ?
jeudi 13 avril 2006 à 11:11:17 | Re : Explication Code C -> Vb

BruNews

Administrateur CodeS-SourceS
ah non, vb n'optimise rien du tout sinon il ne pourrait pas envoyer d'exception overflow.
Un prog vb n'est pas fait pour être rapide.

ciao...
BruNews, MVP VC++


Cette discussion est classée dans : char, crc, unsigned, crcvalue, crclow


Répondre à ce message

Sujets en rapport avec ce message

pb avec conio je cher cherche l'erreur( j'ai merde sur le mess precedent) [ par kin ] portpia.cpp#include"PortPiaPc.h"void main(){ PortPiaPc inst; inst(0x320,0x0f);}PortPiaPc.cpp#include "PortPiaPc.h"#include "conio.h"PortPiaPc::PortPia Pointeurs sur des tableaux de plusieurs dimensions [ par ProGamer ] J'ai besoin de faire des pointeurs sur ce genre de tableaux. Voici comment je m'y prends (et surtout, voici comment ça ne marche pas...):unsigned char char* to unsigned char* [ par rodrigos ] comment peut-on convertir un char* en unsigned char*?à quoi correspond un unsigned char*?Merci pour votre aide!! Comment concertir Ansistring en unsigned char*????? [ par asik38 ] Ansistring x;unsigned char str[100];str[100]=x;??????Merci!!! struct [ par ready4 ] Je ne sais pas comment initialiser mes moteurs //intialisation moteursM1 = {2, 1, 1, 2, 0, 0, 120};M2 = {8, 4, 4, 8, 0, 0, 80};M3 = {32, 16, 16, 32, 0 pb avec variable [ par jeffise57 ] Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai Sniffing - raw socket [ par krum ] J'ai essayé de coder un programme capable de me donner la description de l'en tete IP et TCP des packets que je reçois d'une certaine IP,mais lorsque Conversion de unsigned char en float (17.6E) [ par lemenager ] Bonjour,Je dois lire un fichier binaire dans lequel il y a des float en format (17.6E). J'ai l'impression que je suis oblige de les lires en unsigned transformer un tableau 2d en image bitmap [ par gyzmo1 ] Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique convertion d'une class perso en unsigned char [ par waza ] Salut moi j'ai un probléme de converstion dune classe perso en unsigned char. vc++ me met :"cannot convert from 'class perso' to 'unsigned char'No use


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales