0

Python/Java で (好奇心のために) MD5 を実装しようとしており、ウィキペディアの MD5ページの疑似コードをいずれかの言語に効果的に翻訳しています。まず、Java を使用しましたが、正/負の整数のオーバーフローに不満を感じるだけでした (unsigned int はオプションではないためfor-all integer,-2147483648 <= integer <= 2147483647)。次に、重い数値計算に適していると判断した後、Python を採用しましたが、符号なし 32 ビット整数の要件も克服できないことに気付きました (Python はすぐにラップされintた s をlongs にキャストするため)。

unsigned 32-bit integer前述の MD5 擬似コードで必要とされるJava/Python の s の欠如を回避する方法はありますか?

4

2 に答える 2

1

すべての操作はビット単位の操作であるため、右シフトを除いて、符号拡張 (問題の原因となる) の影響を受けません。

Java には、>>>この目的のための演算子があります。

于 2013-08-28T15:12:46.213 に答える
0

事前の注意として、これが良い解決策かどうかはわかりませんが、希望する動作が得られるようです。

moduleを使用するctypesと、基になる低レベルのデータ型に直接アクセスできるため、Python で unsigned int を持つことができます。

具体的にはctypes.c_uint

>>> i = ctypes.c_uint(0)
>>> i.value -= 1
>>> i                                                            
c_uint(4294967295)
>>> i.value += 1
>>> i
c_uint(0)

これは間違いなくモジュールの悪用です。これは、Python 内から C コードを簡単に使用できるように設計されていますが、私が言うように、機能しているように見えます。私が考えることができる唯一の本当の欠点は、 ctypesCPython 固有であると想定していることです。

于 2013-08-28T15:16:57.330 に答える