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 ?
Je vous propose d'essayer avec 1000110101001000010000001101011000100000001011001100001101110001110000110010110011100000010101110110000010011000 qui est un message correct.
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; }
Merci beaucoup d'avance
Partager