cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
10 août 2006 à 12:33
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
11 août 2006 à 09:15
Bonjour à tous,
J'ai besoin de comprendre le calcul fait par cette fonction (issue d'une doc) afin de le faire à la main.
N'étant pas une élite des symboles C, je demande votre aide afin de transcrire ça en math.
This ‘C’ code segment and data table illustrates how the CRC is calculated.
Le CRC est sur 2 bits...
Pour des éventuels tests, voici quelques exemples en hexa:
01 02 00, doit retourner: 9F DE
08 02 01 4F 00, doit retourner: 76 5E
08 02 01 23 00, doit retourner: 76 73
07 02 00, doit retourner: 9E 3E
05 02 00, doit retourner: 5E 9F
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 11 août 2006 à 09:15
C'est bon, j'ai trouvé:
Indice = byte_de_poid_faible_de_mot XOR nième_caractère_de la_chaine
mot = byte_de_poid_fort_de_mot XOR ccittrev_tbl[indice] // mot vaut 0xFFFF pour le premier caractère
Une fois que l'on a parcouru toute la chaine, on inverse les bites du mot obtenu (opérateur NOT).
Exemple pour: 01 02 00
// Premier element
mot = FFFFind FF XOR 01 // FE = 254mot FF XOR [ind] // FF XOR 0x8081 = 807E
// Deuxième element
mot = 807Eind 7E XOR 02 // 7C = 124mot 80 XOR [ind] // 80 XOR 0xE101 = E181
// Troisième element
mot = E181ind 81 XOR 00 // 81 = 129mot E1 XOR [ind] // 22 XOR 0x60C0 = 6021
NOT 6021 = FFFFFFFFFFFF9FDE, donc 9FDE sur 2 bits.