Bonjour les gars (et les filles aussi, je sais que vous êtes là, pas la peine de le nier) !
Après de longues heures à plancher dessus, j'avoue que j'ai les yeux qui brûlent.
Pour les besoins d'un projet professionnel, je dois calculer le CRC d'une trame SHDLC, en utilisant le polynôme x16 + x12 + x5 + 1 (c'est à dire le CRC-16-CCITT), avec une valeur initiale de 0xFFFF.
Comme pour un autre aspect du projet, j'ai été contraint de me plonger dans une partie du code source de linux, j'ai fini par trouver les fichiers .c et .h correspondant au CRC-CCITT. Et j'avoue ne pas avoir pu m'empêcher de hurler intérieurement concernant la méthode de calcul.
Alors j'ai moi aussi eu ma période "je-mets-toutes-les-opérations-sur-une-même-ligne" et pour diverses raisons (question de lisibilité notamment), j'ai fini par arrêter de le faire. Alors est-ce que quelqu'un peut m'expliquer dans quel sens je dois lire ça :
Pour info, voici la fonction "crc_ccitt" qui appelle la fonction précédente :Code:static inline u16 crc_ccitt_byte(u16 crc, const u8 c) { return (crc >> 8) ^ crc_ccitt_table[(crc ^ c) & 0xff]; }
Cliquez pour afficher
Et pour finir la fameuse "crc_ccitt_table" :
Cliquez pour afficher
Si quelqu'un pouvait m'aider, ce serait franchement la bienvenue parce que là j'en peux plus...
Merci d'avance.
-----