أفضل طريقة لمقارنة تجزئة شا1 من أجل المساواة
سؤال
أريد مقارنة اثنين من التجزئة شا 1 للمساواة.ما يمكن أن يكون أنجع طريقة للقيام بذلك?حاليا ، أحاول استخدام ممكمب.شكرا.
المحلول
حسنا ، نظرا لأنك تعرف بالفعل في وقت الترجمة حجم الكتل ، يمكنك القيام بذلك:
#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
سوف تعمل أيضا.فيما يتعلق بالكفاءة ، سيعتمد ذلك على التنفيذ ، ولكن
أيضا (ربما) كيف يتم تعريف البيانات وتمثيلها.