Bonjour,
Alors voila ... Dans l'application que je dois réalisé, je dois faire un calcule d'un checksum (la facon de calculer le checksum a été défini a l'avance dés deux cotés pour que l'on ai le meme calcule) ... Mais le probleme est que ca prend des valeurs bizzar ... Que ca ne sort pas les valeurs escomptées ...
Voici dans un premier temps le code source :
Code C : 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
51
52
53
54
55
56
57
58
59
60
61
62 #include <stdio.h> #include <stdlib.h> #include <winsock2.h> unsigned short checksum(void *addr, int len); struct statMeasReq{ char control; char lenght; unsigned short checksum; unsigned short packetID; }; int main(void){ int size; // Création d'un pointeur vers la structure. struct statMeasReq *packet; // Allocation de la taille. packet = (struct statMeasReq *)malloc(sizeof(struct statMeasReq)); // Mise a zéro memset(packet, 0x0, sizeof(struct statMeasReq)); ZeroMemory(packet, sizeof(packet)); //mise à zero // Garnissage. packet->control = 0x02; packet->lenght = 6; packet->checksum = 0; packet->packetID = 1; packet->checksum = checksum(packet, 6); free(packet); system("PAUSE"); return 0; } unsigned short checksum(void *addr, int len){ int nleft = len; unsigned short *w = addr; int sum = 0; unsigned short answer = 0; // Somme des données pris deux par deux. while (nleft > 1) { sum += *w; w++; nleft -= 2; } // Calcule du complément à 1 sur 16bits. answer = ~sum; // Envoie de la valeur du checksum calculé. return (answer); }
Voila ... J'espere que vous avez compris mon probleme ... Si jamais je me tien a votre disposition pour répondre à vos questions.
Partager