문제

플랫폼 별 도구에 의존하지 않고 C ++에서 Guid 또는 UUID를 프로그래밍 방식으로 생성하는 가장 좋은 방법은 무엇입니까? 시뮬레이션에서 객체에 대한 고유 식별자를 만들려고하지만 프로젝트가 크로스 플랫폼이므로 Microsoft의 구현에 의존 할 수 없습니다.

메모:

  • 이것은 시뮬레이터를위한 것이므로 암호화 무작위성이 필요하지 않습니다.
  • 이것이 32 비트 숫자 인 경우 가장 좋습니다.
도움이 되었습니까?

해결책

부스트를 사용할 여유가 있다면 uuid 트릭을 수행 해야하는 도서관. 사용하는 것은 매우 간단합니다 - 문서를 확인하고 이 답변.

다른 팁

Linux : Man Uuid

승리 : MSDN에서 UUID 구조 및 UUIDCreate 기능을 확인하십시오.

편집] 함수는 다음과 같이 나타납니다

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

부스트를 사용할 여유가 없다면, 구현 한 최소한의 라이브러리가있어 각 운영 체제의 기본 안내 구현 주변에서 래퍼 역할을합니다. Windows에서 작동해야합니다 (사용 CoCreateGuid), Linux (사용 libuuid), macOS (사용 CFUUID), iOS (또한 사용 CFUUID) 및 안드로이드 (JNI 통화 사용 java.util.UUID). Guid Generation Function은 각 시스템마다 다른 구현을 가지고 있지만 비교, 문자열 및 구문 분석을위한 단일 일반 구현이 있습니다.

MIT 라이센스가 있으며 GitHub에서 사용할 수 있습니다.

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

대상 플랫폼에있는 Guid/UUID를 사용하는 것이 가장 좋습니다. 제대로하는 것은 어렵습니다 (쇼핑하자;)).

다르지만 잘 실행 된 구현에서 두 식별자 간의 충돌 가능성은이 우주의 생애에서 일어날 합리적인 기회를 넘어서야합니다.

안내 생성기는 일반적으로 기계의 하드웨어 특성, 일반적으로 Mac 주소 또는 IP와 같은 제품에 의존합니다. 당신이 할 수있는 유일한 일은 절대적으로 플랫폼 독립적 인 일은 일종의 종류를 사용하는 것입니다. prng 수동으로 시드 또는 시간 소스에서 시드. 이것은 일반적으로 세계 어느 누구도 같은 숫자를 생성하지 않는다는 의미에서 전 세계적으로 고유 한 식별자를 생성하지 않습니다.

OffBeat (?) 솔루션은 웹 서비스를 사용하여 Guid를 얻는 것이지만, 특히 네트워크가 활성화되지 않은 경우 C ++ 프로그램에 좋은 솔루션이 될 것입니다.

다음은이 옵션을 선택하면 유용 할 수있는 URL입니다. http://www.hoskinson.net/guidgenerator/default.asp

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top