سؤال

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top