在C++中以编程方式生成GUID或UUID而不依赖于特定于平台的工具的最佳方式是什么?我正在尝试为模拟中的对象制作唯一的标识符,但不能依赖微软的实现,因为该项目是跨平台的。
备注:
发布于 2009-02-12 21:26:17
如果你有能力使用Boost,那么有一个UUID库可以做到这一点。它的使用非常简单--查看文档和this answer。
发布于 2009-10-27 01:56:56
在linux上: man uuid
on win:查看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;
}
发布于 2014-06-01 09:04:27
如果您不能使用Boost,那么我实现了一个非常小的库,它只是作为每个操作系统的本机guid实现的包装器。它应该可以在Windows (使用CoCreateGuid
)、Linux (使用libuuid
)、MacOS (使用CFUUID
)、iOS (也使用CFUUID
)和Android (使用java.util.UUID
的JNI调用)上工作。guid生成函数在每个系统上都有不同的实现,但有一个用于比较、字符串注册和解析的通用实现。
它是麻省理工学院许可的,可以在GitHub上找到:
https://stackoverflow.com/questions/543306
复制相似问题