C ++의 플랫폼 독립적 인 가이드 생성?
-
23-08-2019 - |
문제
플랫폼 별 도구에 의존하지 않고 C ++에서 Guid 또는 UUID를 프로그래밍 방식으로 생성하는 가장 좋은 방법은 무엇입니까? 시뮬레이션에서 객체에 대한 고유 식별자를 만들려고하지만 프로젝트가 크로스 플랫폼이므로 Microsoft의 구현에 의존 할 수 없습니다.
메모:
- 이것은 시뮬레이터를위한 것이므로 암호화 무작위성이 필요하지 않습니다.
- 이것이 32 비트 숫자 인 경우 가장 좋습니다.
다른 팁
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에서 사용할 수 있습니다.
대상 플랫폼에있는 Guid/UUID를 사용하는 것이 가장 좋습니다. 제대로하는 것은 어렵습니다 (쇼핑하자;)).
다르지만 잘 실행 된 구현에서 두 식별자 간의 충돌 가능성은이 우주의 생애에서 일어날 합리적인 기회를 넘어서야합니다.
안내 생성기는 일반적으로 기계의 하드웨어 특성, 일반적으로 Mac 주소 또는 IP와 같은 제품에 의존합니다. 당신이 할 수있는 유일한 일은 절대적으로 플랫폼 독립적 인 일은 일종의 종류를 사용하는 것입니다. prng 수동으로 시드 또는 시간 소스에서 시드. 이것은 일반적으로 세계 어느 누구도 같은 숫자를 생성하지 않는다는 의미에서 전 세계적으로 고유 한 식별자를 생성하지 않습니다.
OffBeat (?) 솔루션은 웹 서비스를 사용하여 Guid를 얻는 것이지만, 특히 네트워크가 활성화되지 않은 경우 C ++ 프로그램에 좋은 솔루션이 될 것입니다.
다음은이 옵션을 선택하면 유용 할 수있는 URL입니다. http://www.hoskinson.net/guidgenerator/default.asp