次のcコード(ファイルのチェックサムを計算するため)をPythonに変換する必要があります。対応するコードをPythonで作成しましたが、結果がcバージョンと一致しませんでした。問題は、オーバーフローが発生するたびにpythonがintを自動的にlongにプロモートし、これによりチェックサムが間違ってしまうことでした。
この問題を克服する方法はありますか?または、longをsigned int32に変換するPython関数はありますか?
ありがとう
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