Ну, так как вы уже знаете во время компиляции, насколько велики блоки, вы можете сделать это:
#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
был еще быстрее, потому что он сделал что-то очень умное и грязное.