0

私はこのPythonコードを持っています(hexdigestはSHA1です):

d = long(hexdigest, 16)
if d >> 159:
    return "-%x" % ((-d) & (2**160-1))
return "%x" % d

このコードを D に変換する必要があります。いくつかのことを試しました。

  • to!long(hexdigest, 16) – オーバーフローで失敗しました (ulong には大きすぎます)
  • std.BigIntバイナリをサポートしていません&

Dでそれをどのように行いますか?CC ソリューションは D でも機能するため、この質問に関連するタグを付けました。

4

2 に答える 2

1

このコードは NOP のように見えます。20 バイトの数値である SHA1 hexdigest を解析しています。160 ビットを超えることは決してないため、d>>160常に 0 です。そのため、同じ形式で hexdigest を再フォーマットするだけです。先行ゼロがある場合は、削除していると思います。

D がビット操作 ( 、、 )std.BigIntを提供していないことに驚いています。自分で書く?そんなに難しいことはできません。&|^

于 2012-07-31T16:28:52.440 に答える