을 비교하는 가장 좋은 방법 sha1 해시에 대한 평등
문제
나는 비교하려면 두 sha1 해시에 대한 평등.무엇을 할 수 있는 가장 효율적인 방법으로 하면 이렇게 할 수 있습니까?지금,나는 사용하려고 memcmp.감사합니다.
해결책
만,이미 알고 있기 때문에서 컴파일할 시간이 얼마나 큰 블록은,당신은 이렇게 할 수 있다:
#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
여전히 빠른았기 때문에 무언가가 매우 똑똑하고 더럽습니다.
다른 팁
memcmp()
가 뭐가 잘못 되었습니까?두 해시의 모든 바이트를 비교해야합니다.memcmp()
는 첫 번째 차이점에서 빠르게 실패합니다.그리고 memcmp()
는 라이브러리 작성자가 플랫폼에 대한 선택이 좋은 청크 크기로 작동하도록 작성할 수 있습니다.
std::equal
가 최상의 내기가 보일 것입니다. 그러나 memcmp
도 작동합니다.
효율성과 관련하여 구현에 따라 다릅니다.
또한 데이터가 정의되고 표현되는 방법 (가능합니다).
제휴하지 않습니다 StackOverflow