Problema no cálculo da soma de verificação: converter int para assinado int32
Eu preciso converter o seguinte código c (para calcular a soma de verificação de um arquivo) para python. Eu tinha escrito, o código correspondente em python, mas o resultado não correspondia à versão c. O problema era que o python promove automaticamente int por muito tempo sempre que ocorre um estouro e isso resulta em somas de verificação incorretas.
Alguma idéia de como superar esse problema? ou existe uma função python que converte muito tempo em int32 assinado?
obrigado
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;
}
Solução:
Obrigado por toda a ajuda. Aqui está a função que funcionou para mim -
def int32(x):
x = 0xffffffff & x
if x > 0x7fffffff :
return - ( ~(x - 1) & 0xffffffff )
else : return x