C'est certainement une question très stupide, mais pour une raison quelconque, j'ai des problèmes avec les calculs de total de contrôle Internet. Tous les algorithmes rétrospectifs essentiellement quelque chose comme ceci:Changement de bits dans les sommes de contrôle Internet
WORD chksm(WORD *startpos, WORD checklen){
ulong sum = 0;
WORD answer = 0;
while (checklen > 1)
{
sum += *startpos++;
checklen -= 2;
}
if (checklen == 1)
{
*(BYTE *)(&answer) = *(BYTE *)startpos;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return answer;}
Je suis clair sur tout, sauf pour la ligne:
sum += (sum >> 16);
Il ressemble à la ligne immédiatement avant d'ajouter les 16 bits à la 16 bits en bas, en laissant tous les zéros dans les 16 bits supérieurs. Si c'est le cas, alors, somme >> 16 ne serait-elle pas égale à zéro? Et si oui, pourquoi cette ligne est là? Ou suis-je (probablement) en train de subir un échec mental complet aujourd'hui?
Awesome. Merci tout le monde. –