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