Frage

Was ist der beste Weg, um programmatisch einen GUID oder UUID in C ++ zu erzeugen, ohne auf einem plattformspezifischen Werkzeug zu verlassen? Ich versuche, eindeutige Kennungen für Objekte in einer Simulation zu machen, kann aber nicht auf Microsofts Implementierung angewiesen, da das Projekt Cross-Plattform ist.

Weitere Informationen:

  • Da dies für einen Simulator, I nicht wirklich brauchen Verschlüsselungs Zufälligkeit.
  • Es wäre am besten, wenn dies eine 32-Bit-Zahl ist.
War es hilfreich?

Lösung

Wenn Sie sich leisten können Boost zu verwenden, dann gibt es eine UUID Bibliothek, die das tun sollten Trick. Es ist sehr einfach zu bedienen. - Überprüfen Sie die Dokumentation und diese Antwort

Andere Tipps

auf Linux: Mann Uuid

auf Sieg: Check-Out für UUID Struktur und Funktion UuidCreate in Msdn

[Bearbeiten] die Funktion wie folgt aussehen würde

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;
}

Wenn Sie sich nicht leisten können Boost zu verwenden, dann gibt es eine sehr minimal-Bibliothek, die ich realisiert, die einfach als Wrapper fungiert um jedes Betriebssystem native guid Implementierung. Es sollte unter Windows arbeiten (mit CoCreateGuid), Linux (mit libuuid), MacOS (mit CFUUID), iOS (auch CFUUID verwenden) und Android (JNI-Aufrufe java.util.UUID). Die guid Erzeugungsfunktion hat eine andere Implementierung auf jedem System, aber es gibt einzelne generische Implementierung für den Vergleich, stringifying und Parsen.

Es ist MIT lizenziert und auf GitHub:

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

Sie einfach mit, was guid / UUID auf der Zielplattform vorhanden ist, ist am besten. Doing es richtig hart ist (sie einkaufen gehen;)).

Die Wahrscheinlichkeit einer Kollision zwischen zwei Kennungen von verschiedenem, aber gut ausgeführt Implementierungen sollte über eine vernünftige Chance, auch in diesem Universum der Lebenszeit des Geschehens.

Ein GUID-Generator basiert in der Regel auf Hardware-Eigenschaften der Maschine, in der Regel Sachen wie MAC-Adressen oder IP-Adressen. Das einzige, was Sie tun können, die absolut plattformunabhängig ist eine Art der Nutzung von PRNG ausgesät manuell oder ausgesät aus einiger Zeit Quelle. Dies gilt in der Regel keine echte global eindeutige Kennung im Sinne erzeugen, die Sie garantiert werden, dass niemand auf der Welt die gleiche Zahl erzeugt.

Nun ja, ein unkonventionell (?) Lösung wäre, einen Web-Service zu verwenden, um die GUID zu erhalten, aber ich bezweifle, dass dies eine gute Lösung für ein C ++ sein Programm vor allem, wenn es fähiges Netzwerk nicht.

Hier ist eine URL, die sich als nützlich erweisen könnte, wenn Sie sich dazu entscheiden, diese Option zu verfolgen: http: //www.hoskinson.net/GuidGenerator/default.asp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top