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![]()







Répondre avec citation



quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez 
Partager