Проблема в вычислении контрольной суммы: приведение int к подписанному int32

Мне нужно преобразовать следующий код c (чтобы вычислить контрольную сумму для файла) в Python. Я написал соответствующий код на python, но результат не соответствовал версии c. Проблема заключалась в том, что python автоматически переводит int в long при возникновении переполнения, что приводит к неправильным контрольным суммам.

Есть идеи, как преодолеть эту проблему? или есть функция python, которая конвертирует long в int32 со знаком?

Спасибо

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

Решение:

Спасибо за помощь. Вот функция, которая работала для меня -

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

Ответы на вопрос(1)

Ваш ответ на вопрос