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

C++ Discussion :

problème CRC32 optimisé!


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut problème CRC32 optimisé!
    Salut à tous!

    Pour les besoin de mon projet, j'ai besoin d'un moyen de calculer et de tester l'integrité des données avec le mecanismes de CRC.

    jusque là facile, j'implémenter la fonction qui permet de faire, mais avec l'algorithme de base, c'est-à-dire, par terrible au niveaux des performances, car traitement des données bit à bit.
    J'ai donc voulu implémenter l'algorithme dit de Table-driven, qui nettement plus performant notamment car il travaille byte par byte.

    Donc mon calcul se fait correctement avec l'algo de base, mais des le moment ou j'ai pris des algo de table-driven, alors la tout fonctionne mais ca calcul faux.
    J'ai donc recherché d'autres algorithmes sur le net, qui eux ont exactement le meme defaut, c'està-dire que le calcul est faux aussi , et il donne la meme valeur fausse, d ou ma surprise....

    Je voulais voir si qqun avait deja eu a faire a ce genre de probleme????? peut etre est ce un defaut connu???

    le polynome generateur que j utilise est : 0x04c11db7

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    voila je vous mets un des codes testé qui possède ce defaut!

    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
     
    /* Table of CRCs of all 8-bit messages. */
       unsigned long crc_table[256];
     
       /* Flag: has the table been computed? Initially false. */
       int crc_table_computed = 0;
     
       /* Make the table for a fast CRC. */
       void make_crc_table(void)
       {
         unsigned long c;
         int n, k;
     
         for (n = 0; n < 256; n++) {
           c = (unsigned long) n;
           for (k = 0; k < 8; k++) {
             if (c & 1)
               c = 0xedb88320L ^ (c >> 1);
             else
               c = c >> 1;
           }
           crc_table[n] = c;
         }
         crc_table_computed = 1;
       }
     
       /* Update a running CRC with the bytes buf[0..len-1]--the CRC
          should be initialized to all 1's, and the transmitted value
          is the 1's complement of the final running CRC (see the
          crc() routine below)). */
     
       unsigned long update_crc(unsigned long crc, unsigned char *buf,
                                int len)
       {
         unsigned long c = crc;
         int n;
     
         if (!crc_table_computed)
           make_crc_table();
         for (n = 0; n < len; n++) {
           c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
         }
         return c;
       }
     
       /* Return the CRC of the bytes buf[0..len-1]. */
       unsigned long crc(unsigned char *buf, int len)
       {
         return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL;
       }

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il me semble que ce genre d'algorithmes est disponible dans boost.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Par défaut
    alors si jamais ca interresse quelqu'un je pus resoudre mon problème de crc, ce qui fait que j'ai un algorithme de Table-Driven CRC qui fonctionne pour la norme MPEG-2.

    Merci de m'avoir lu.

  5. #5
    Invité de passage
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1
    Par défaut
    Salut Chrono23,

    Je crois que j'ai le même souci que toi, peux-tu m'en dire un peu plus stp.

    Jejer

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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