Problem bei der Berechnung der Prüfsumme: Umwandlung von int in signiertes int32

Ich muss den folgenden c-Code (um die Prüfsumme für eine Datei zu berechnen) in Python konvertieren. Ich hatte den entsprechenden Code in Python geschrieben, aber das Ergebnis stimmte nicht mit der c-Version überein. Das Problem war, dass Python beim Auftreten eines Überlaufs automatisch auf int zu long hochfährt und dies zu falschen Prüfsummen führt.

Haben Sie eine Idee, wie Sie dieses Problem lösen können? Oder gibt es eine Python-Funktion, die Long in Int32 mit Vorzeichen konvertiert?

Vielen Dank

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;
}

Lösung:

Danke für all die Hilfe. Hier ist die Funktion, die bei mir funktioniert hat:

 def int32(x):
    x = 0xffffffff & x
    if x > 0x7fffffff :
        return - ( ~(x - 1) & 0xffffffff )
    else : return x 

Antworten auf die Frage(1)

Ihre Antwort auf die Frage