Somme de contrôle en C++
J'ai besoin d'aide avec l'écriture d'un code en C++ pour faire un 16 bits de la somme de contrôle.
L'idée est de récupérer les données d'entrée de l'utilisateur (une chaîne), de les convertir en binaire, puis calculer la somme de contrôle et la mettre dans mon paquet de données. Je n'ai pas de somme de contrôle type de spécification... j'ai pensé XORing les 16 bits serait une bonne idée. J'ai la classe suivante paquet de donnée:
class packet
{
private:
string message;
unsigned int checksum; //this is a 16 bit checksum
unsigned int seqNum;
public:
packet(string str, unsigned int seq);
void setMessage(string str);
void setSeqNum(unsigned int num);
string getMessage();
int getLength();
unsigned int calculateChecksum();
int getChecksum();
bool getSeqNum();
};
- Je calculer mon checksum ici, compte tenu de ce qui précède:
packet::packet(string str, unsigned int seq)
{
this->message = str;
this->seqNum = seq;
//calculate checksum here
checksum = calculateChecksum(); //HOW TO CODE THIS FUNCTION?
}
S'il vous plaît aider. Je suis novice en C++ et C.
- Voir fletcher de la somme de contrôle.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser de la somme de contrôle utilisés dans l'en-tête IPv4, c'est 16bit:
http://en.wikipedia.org/wiki/IPv4_header_checksum
Ou découvrez CRC16:
http://en.wikipedia.org/wiki/Crc16
Vous pouvez trouver plus algorighms si vous googlé un peu partout:
http://en.wikipedia.org/wiki/List_of_hash_functions
http://en.wikipedia.org/wiki/Category:Checksum_algorithms
Pour mettre en œuvre votre fonction, tout d'abord de manière séquentielle convertir chaque paire de caractères dans votre
String message
et le nourrir à l'algorithme de somme de contrôle.Si vous avez un nombre impair d'octets, vous avez à zéro pad le dernier octet correctement (vérifiez les docs pour votre algorithme particulier que vous avez choisi, ou tout simplement de calculer la 16 bits de la valeur de la dernière paire comme le dernier caractère manquant était de zéro).
Après avoir traité le message, ajouter la seq numéro de la a et de stocker votre somme de contrôle résultat dans votre
checksum
variable.Si vous voulez tester si vous avez fait une erreur dans le processus, de nombreux algorithmes (cyclique) faire une sortie un résultat nul après avoir haché, le message entier, y compris ses CRC. Si vous obtenez zéro, cela signifie que le message n'est pas corrompu ou votre algorithme fonctionne correctement lorsque vous le tester.
mise en œuvre d'une fonction se présente comme suit:
Le constructeur est déjà mis en œuvre?