如何在不依赖平台特定工具的情况下以C++编程语言生成GUID或UUID的最佳方法? 我正在尝试为模拟中的对象生成唯一标识符,但由于该项目是跨平台的,因此不能依赖Microsoft的实现。
备注:
- 由于这是用于模拟器,因此我并不需要加密随机性。
- 最好使用32位数字。
如何在不依赖平台特定工具的情况下以C++编程语言生成GUID或UUID的最佳方法? 我正在尝试为模拟中的对象生成唯一标识符,但由于该项目是跨平台的,因此不能依赖Microsoft的实现。
备注:
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;
}
CoCreateGuid
),Linux(使用libuuid
),MacOS(使用CFUUID
),iOS(也使用CFUUID
)和Android(使用JNI调用java.util.UUID
)。每个系统上的guid生成函数具有不同的实现,但有单一通用的实现来进行比较、字符化和解析。在目标平台上使用现有的guid/uuid是最好的。正确地实现这一点很难(让我们去购物;)。
来自不同但执行良好的实现的任何两个标识符之间发生冲突的概率应该远远超出本宇宙寿命内发生任何合理机会的范围。
一个不太常规的解决方案是使用 Web 服务获取 GUID,但我怀疑这对于 C++ 程序来说并不是一个好的解决方案,特别是如果它没有启用网络功能。
如果您选择追求这个选项,这里有一个可能会有用的 URL: http://www.hoskinson.net/GuidGenerator/default.asp