Bonjour,
Pour un projet de contrôle d'accès avec lecteur RFID.. je dois implémenter en java une fonction de calcul crc donnée par le constructeur de carte rfid mais en c.. et je n'arrive pas à la retranscire
Voici la fameuse fonction :
J'ai essayé un convertisseur sur internet mais sans réussite mais aussi de la faire moi-même de cette façon :
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 void LiczCRC2(unsigned char *FromAddr, unsigned short *ToAddr, unsigned char Many) { int i,NrBajtu; unsigned short C; *ToAddr=0; for (NrBajtu=1;NrBajtu<=Many;NrBajtu++,FromAddr++) { C=((*ToAddr>>8)^*FromAddr)<<8; for (i=0;i<8;i++) if (C&0x8000) C=(C<<1)^0x1021; else C=C<<1; *ToAddr=C^(*ToAddr<<8); } } where: *FromAddr - is the data first byte flag Many - informs how many data bytes will be used for calculation *ToAddr - is the flag for the calculated CRC value
Ma fonction me renvoie 18300000 quand j'envoie la trame 010530 au lieu de FE96.. et si je remplace les entiers par des shorts, cela me renvoie 0..
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 public static String CalculCRC(String trame) { String CRC=""; int i, j, k=0, a=0; byte b[] = hexStringToByteArray(trame); int longueurTrame = b.length; int res = 0, c= 0 & 0xff; //int b = ...; //b = (b + 100) & 0xff; for (j=1; j<=longueurTrame; j++) { c = (((res << 8)^b[k])<<8); for(i=0;i<8;i++) { a = c & 0x8000; if (a == 1) { c = ((c<<1) ^ 0x1021); } else { c = (c<<1); } res = (c ^ (res <<8)); } k++; } CRC = Integer.toHexString(res); return CRC; }
Ma soutenance étant dans 4 jours, je vous demande de l'aide désespérément ^^
Merci d'avance
Partager