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

Programmation et administration système Perl Discussion :

Calcul d'un CRC 16 bits


Sujet :

Programmation et administration système Perl

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Par défaut Calcul d'un CRC 16 bits
    Salut ,
    je debute en PERL et j'ai ce code en C++ qui me calcule le CRC 16 bits d'un fichier contenant des mots de donnees codee en hexadecimal.
    En piece jointes j'ai mis une image du fichier de donnees pour lequel il faut calculer le CRC ainsi que des explications.
    Voici le code C calculant le CRC de mon fichier:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    void CPropPgFormDoc::OnAddCrc(LPCTSTR lpszPathName) 
    { //calcul the cRC of the file Spath
    	CFileException fe;
    	CFile* pFile = NULL;
    	CString sPath = lpszPathName;
    	CString sCRC;
    //	static char BASED_CODE szFilter[] = "Patch Files (*.fdw)|*.fdw|All Files (*.*)|*.*||";	
     
    	BYTE ser_data;
    	WORD CRC, tmp,i; 
    static	DWORD CrcTabReady=0;
    static  CrcTab[512];
     
    		CRC=0xFFFF;
    		pFile = GetFile(sPath, 
    			CFile::modeReadWrite | CFile::shareExclusive, &fe);
    		int nLgFile = 0;
     
    		nLgFile = pFile->GetLength();			
     
    		BYTE* lpPatchFile = new BYTE[nLgFile];
    		BYTE* lpStartPatchFile = lpPatchFile;
    		pFile->Read(lpPatchFile, nLgFile);
     
    		if(CrcTabReady==0){
    			for(i=0;i<512;i++){
    				tmp=0;
    				if((i&1)!=0) tmp=(tmp^0x1021);
    				if((i&2)!=0) tmp=(tmp^0x2042);
    				if((i&4)!=0) tmp=(tmp^0x4084);
    				if((i&8)!=0) tmp=(tmp^0x8108);
    				if((i&16)!=0) tmp=(tmp^0x1231);
    				if((i&32)!=0) tmp=(tmp^0x2462);
    				if((i&64)!=0) tmp=(tmp^0x48C4);
    				if((i&128)!=0) tmp=(tmp^0x9188);
    				CrcTab[i]=tmp;
    			}
    			CrcTabReady=1;
    		}
     
    		nLgFile -= 2;
    		lpPatchFile += 2;
     
    		while(nLgFile--) CRC=((CRC << 8)^CrcTab[(CRC>>8)^*lpPatchFile++]);
    		pFile->SeekToBegin();
    		pFile->Write(&CRC,2);
    		pFile->Close();
     
    /*		CWaitCursor waitCursor;
    		AfxMessageBox("BBy Factory Settings + CRC saved successfully",
    		   MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);
    */
    		delete  [] lpStartPatchFile;
     
    }
    Ce que je cherche c'est de calculer ce CRC16bits avec unj script PERL, merci
    Images attachées Images attachées  

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

Discussions similaires

  1. Calculs sous Windows XP 64 bits
    Par DidLaw dans le forum Ordinateurs
    Réponses: 1
    Dernier message: 19/04/2010, 14h25
  2. Calcul de PI, optimisation 64 bits
    Par elekaj34 dans le forum Bibliothèque standard
    Réponses: 13
    Dernier message: 14/11/2008, 15h25
  3. erreur dans le calcul de nombre moyen des bits érronés
    Par princesse07 dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/05/2008, 14h30
  4. Calcul de CRC 64 bits
    Par pseudocode dans le forum Contribuez
    Réponses: 2
    Dernier message: 21/10/2007, 18h00
  5. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27

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