Bonjour a toutes et tous, je sollicite votre aide car j'ai un souci incompréhensible pour moi:
Je travaille sur un programme de communication série RS485 avec protocole MODBUS. J'écris mon programme en C et je travaille avec eclipse sous Linux.
Dans mon programme, j'envoie une demande de lecture avec un write et je reçoit la réponse avec le read. La réponse que je reçoit est sous la forme décimal et ce que je veux lire à une taille de 4 octets. Voici la réponse que je lis en héxadécimal: 01 04 09 FF FF FF FF CRC16 CRC16 (que je stocke dans une variable que j'appelle buffer) (ici les données qui nous intéresse pour le traitement sont FF FF FF FF).
Pour connaître la valeur en décimal je fais un traitement comme ceci:
Avec ma calculatrice, je devrais obtenir le résultat 4294967295, or lorsque je regarde ce qu'affiche mon prinft j'obtiens 18446744073709551615 avec un warning me disant "integer overflow in exepression". Cela sous-entendrait donc qu'il y a un dépassement de ce que peut contenir mon long. Je dis okay, pourquoi pas mais lorsque je rentre en dur mon résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 unsigned long MaValeur; MaValeur = buffer[3]*(256^3) + buffer[4]*(256^2) + buffer[5]*256 + buffer[6]; printf("%lu\n", MaValeur);
Mon prinft affiche le bon résultat. Donc je ne comprend pas pourquoi j'ai ce problème, pouvez-vous m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2MaValeur = 4294967295;
Cordialement,
Partager