Esercizio in C++ per il calcolo del Checksum di una stringa

L’esercizio risolto in seguito, ti mostra come calcolare il Checksum di una stringa. Il Checksum, è detto codice di rileazione degli errori. In alcune trasmissione di rete, ad esempio su reti IP, il Checksum viene utilizzato, per controllare che i dati trasmessi tra due nodi siano corretti.
In che modo avviene questa operazione ?
Il trasmettitore, si supponga che ad esempio deve inviare un datagramma IP ovvero un pacchetto detto anche “PDU” ad un nodo “host” remoto. Il datagrammma avrà un’intestazione inserita nel pacchetto oltre che le informazioni vere e proprie trasportate. Proprio nel datagramma IP è presente un campo di nome “Header Checksum” ovvero un campo che contiene il calcolo del “checksum” di tutti i campi dell’intestazione del datagramma.
Ma come si calcola il Checksum ? Semplice si sommano tutti i valori interi associati al Codice ASCII e si calcola il resto della divisione di una potenza di 16. Questo numero è il Checksum. Alla ricezione del pacchetto il nodo destinatario calcola il Checksum di nuovo e lo confronta con quello ricevuto, se l’esito è positivo, nel senso che i valori numerici sono identici allora il pacchetto è stato trasmesso correttamente altrimenti è riscontrato un errore.
Senza entrare in ulteriori dettagli tecnici, ti inserisco un programma in C++ che esegue questa operazione di calcolo.

Questo sorgente calcola il checksum di una sequenza di caratteri o di una sequenza di numeri.
#include <iostream>
#include <string.h>
using namespace std;
int num;
char parola[200][30];
int scelta;
int chks;
int s;
int main (){
s=0;
cout << "Benvenuto questo programma calcola il checksum di un numero o di una stringa\n";
cout << "Devi premere 1 se vuoi operare con i numeri\n";
cout << "Devi premere 2 se vuoi operare con le stringhe\n";
cin >> scelta;
if (scelta==1)
{
  cout << "inserisci il numero\n";
  cin >> num;
  chks= num % 256;
  while (chks >255){
  num=(int)(num / 256);
  chks = num % 256; }
  cout << "Il checksum è:\t"<< chks;
}
if (scelta==2){
int k=0;
do {
  cout << "inserisci la "<<k+1<<"° parola della frase termina con .\t";
  cin >> parola[k];
  k++;
}
    while (parola[k-1][0]!='.');
    cout << "Procedo al calcolo del ckecsum ....\n";
    int i,j;        
    for (i=0;i<k;i++)
        for (j=0;j<strlen(parola[i]);j++)
            s=s+(int)parola[i][j];
    chks=s % 256;
        while (chks>255){
    s=(int)(s/256);
    chks=s % 256;}
    cout << "Il checksum per la frase scelta è:\t" << endl;
    cout << chks;
    cout << "\nA presto\n";
}
return 0;
}