Problema en el cálculo de la suma de comprobación: convertir int a int32 con signo

Necesito convertir el siguiente código c (para calcular la suma de verificación de un archivo) a python. Había escrito el código correspondiente en python pero el resultado no coincidía con la versión c. El problema fue que python promueve automáticamente int a long siempre que se produce un desbordamiento y esto da como resultado sumas de verificación incorrectas.

¿Alguna idea de cómo superar este problema? ¿O hay una función de Python que convierte largos a int32 con signo?

Gracias

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

Solución:

Gracias por toda la ayuda. Aquí está la función que funcionó para mí:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta