Je dois convertir le code c suivant (pour calculer la somme de contrôle pour un fichier) en python. J'avais écrit, le code correspondant en python mais le résultat ne correspondait pas à la version c. Le problème était que python promouvait automatiquement int à long chaque fois qu'un débordement se produisait, ce qui se traduisait par de mauvais checksums.Problème dans le calcul de la somme de contrôle: int inté à int32
Une idée de comment résoudre ce problème? ou existe-t-il une fonction python qui convertit long à signé int32?
Merci
int calcChecksum(const guchar *data, gsize len)
{
const guchar *p = data;
int checksum = 0, g, i = len;
while(i--) {
checksum = (checksum << 4) + *p++;
if((g = (checksum & 0xf0000000)) != 0)
checksum ^= g >> 23;
checksum &= ~g;
}
return checksum;
}
Solution:
Merci pour toute l'aide. Voici la fonction qui a fonctionné pour moi -
def int32(x):
x = 0xffffffff & x
if x > 0x7fffffff :
return - (~(x - 1) & 0xffffffff)
else : return x
N'y at-il pas quelque chose qui manque dans le code c? data/p semble être utilisé de façon très étrange ... – mjv
Désolé, le '+' a été accidentellement supprimé lors du formatage. Corrections faites. merci –