2つのsha1ハッシュが等しいかどうかを比較したいと思います。これを行うための最も効率的な方法は何でしょうか?現在、memcmpを使用しようとしています。ありがとう。
1988 次
3 に答える
3
さて、コンパイル時にブロックの大きさをすでに知っているので、これを行うことができます:
#include <cstdint>
bool is_same_sha1(const char* p, const char* q)
{
const std::uint32_t* a = (const std::uint32_t*)p;
const std::uint32_t* b = (const std::uint32_t*)q;
return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]
&& a[3] == b[3] && a[4] == b[4];
}
ただし、私のアドバイスを盲目的に受け取らないでください。カスタムソリューションをソリューションに対して測定memcmp
し、パフォーマンスが大幅に向上する場合にのみ使用する必要があります。memcmp
それが非常に巧妙で汚いことをしたので、それでももっと速いとしても私は驚かないでしょう。
于 2012-03-14T08:41:42.637 に答える
2
std::equal
最善の策のように見えますが、機能しmemcmp
ます。効率に関しては、実装に依存しますが、(おそらく)データがどのように定義および表現されるかにも依存します。
于 2012-03-14T08:41:19.270 に答える
2
何が問題なのmemcmp()
ですか?両方のハッシュのすべてのバイトを比較する必要があります。memcmp()
見つかった最初の違いですぐに失敗します。またmemcmp()
、ライブラリの作成者は、プラットフォームに適したチャンクサイズで作業するように作成できます。
于 2012-03-14T08:33:59.403 に答える