Bonjour,

Je cr�e un logiciel qui aura pour but d'interpr�ter les messages ADS-B des avions. Ces messages, dans leur forme binaire, ont un corps de 88 bits, et une somme de contr�le de 24 bits.
Le polyn�me pour g�n�rer la somme de contr�le est de 24+1 caract�res, soit 25 : 1111111111111010000001001

J'essaye donc de v�rifier cette somme de contr�le, mais j'ai vraiment du mal... J'ai suivi un cours sur developpez.com mais je n'arrive pas � faire ce que je veux, le programme m'indique que le message est faux alors qu'il est juste :/ Pourriez-vous me dire ce qui ne va pas ?

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
35
36
37
#include <iostream>
#include <String>
 
int main() {
    std::string binMessage; // 88 bits + 24 checksum bits = 112 total
    std::string crc;
    std::string polynom = "1111111111111010000001001"; // 25 bits
 
    std::cout << "Entrer message : ";
    std::cin >> binMessage;
 
    crc = binMessage.substr(88, 24); // Sauvegarde du CRC transmis
 
    for(int i = 0; i != 88; i++) { // Pour les 88 bits du messages
        if(binMessage.substr(i, 1) == "1") { // Si on a 1
            for(int j = 0; j != 25; j++) { // Alors pour les 25 caractères suivant, dont le 1
                if(binMessage[i + j] != polynom[j]) { // On fait un XOR avec le polynôme
                    binMessage.replace(i + j, 1, "1");
                }
 
                else {
                    binMessage.replace(i + j, 1, "0");
                }
            }
        }
    }
 
    if(binMessage.substr(88, 24) == crc) {
        std::cout << "Message valide !";
    }
 
    else {
        std::cout << "Message invalide.";
    }
 
    return 0;
}
Je vous propose d'essayer avec 1000110101001000010000001101011000100000001011001100001101110001110000110010110011100000010101110110000010011000 qui est un message correct.

Merci beaucoup d'avance