سؤال

ما هي أفضل طريقة لتوليد GUID أو UUID برمجيا في C ++ دون الاعتماد على أداة محددة منصة؟ أحاول أن أحصل على معرفات فريدة من نوعها للأشياء في محاكاة، ولكن لا يمكن الاعتماد على تنفيذ مايكروسوفت كشروع هو منصة عبر منصة.

ملاحظات:

  • لأن هذا هو محاكاة، أنا لا أحتاج حقا عشوائية التشفير.
  • سيكون من الأفضل إذا كان هذا رقم 32 بت.
هل كانت مفيدة؟

المحلول

إذا كنت تستطيع استخدام دفعة، فهناك uuid. المكتبة التي يجب أن تفعل الخدعة. انها واضحة جدا للاستخدام - تحقق من الوثائق و هذه الإجابة.

نصائح أخرى

على لينكس: رجل Uuid

على الفوز: تحقق من هيكل UUID وظيفة UUIDCreate في MSDN

تحرير] ستظهر الوظيفة مثل هذا

extern "C"
{
#ifdef WIN32
#include <Rpc.h>
#else
#include <uuid/uuid.h>
#endif
}

std::string newUUID()
{
#ifdef WIN32
    UUID uuid;
    UuidCreate ( &uuid );

    unsigned char * str;
    UuidToStringA ( &uuid, &str );

    std::string s( ( char* ) str );

    RpcStringFreeA ( &str );
#else
    uuid_t uuid;
    uuid_generate_random ( uuid );
    char s[37];
    uuid_unparse ( uuid, s );
#endif
    return s;
}

إذا لم تتمكن من استخدام دفعة، فهناك مكتبة ضئيلة للغاية قمت بتنفيذها التي تعمل ببساطة كغلاف حول تطبيق GUID الأصلي لنظام التشغيل. يجب أن تعمل على ويندوز (باستخدام CoCreateGuid)، لينكس (باستخدام libuuid)، ماكوس (باستخدام CFUUID)، iOS (أيضا باستخدام CFUUID)، واندرويد (باستخدام مكالمات JNI java.util.UUID). تتمتع وظيفة توليد GUID بتنفيذ مختلف على كل نظام ولكن هناك تطبيق عام واحد للمقارنة والاخترية والتحليل.

إنها مرخصة ومتاحة على Github:

https://github.com/graeme-hill/crossguid.

ما عليك سوى استخدام أي GUID / UUID موجود على النظام الأساسي المستهدف هو الأفضل. القيام بذلك بشكل صحيح صعب (دعنا نذهب للتسوق؛)).

يجب أن يكون احتمال تصادم بين أي معرفيين من مختلف التطبيقات المنفذة بشكل جيد.

يعتمد مولد GUID عادة على خصائص الأجهزة للآلة، وعادة ما تكون أشياء مثل عناوين MAC أو IPS. الشيء الوحيد الذي يمكنك القيام به وهو منصة مستقلة تماما هو استخدام نوع من PRNG. المصنف يدويا أو المصنف من بعض الوقت المصدر. هذا عادة لا يولد معرفا فريدا حقيقيا عالميا بمعنى أنك مضمون بأن لا أحد في العالم يولد نفس العدد.

حسنا، سيكون حل OneBeat (؟) استخدام خدمة ويب للحصول على GUID لكنني أشك في أن هذا سيكون حلا جيدا لبرنامج C ++ خاصة إذا لم يتم تمكين الشبكة.

فيما يلي عنوان URL الذي قد يأتي في متناول يدي إذا اخترت متابعة هذا الخيار: http://www.hoskinson.net/guidgenerator/default.asp.

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