문제

나는 비교하려면 두 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도 작동합니다. 효율성과 관련하여 구현에 따라 다릅니다. 또한 데이터가 정의되고 표현되는 방법 (가능합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top