在编程过程中,我们经常需要生成唯一编码标示,生成UUID是最常见的,但是一般来说,生成UUID都需要相应的库文件,并且WINDOWS和linux也不能相互兼容,较为麻烦,以下推荐可以兼容linux和windows的生成UUID方法,不需要依赖库
#ifdef WIN32
unsigned int getstimeval()
{
unsigned int us;
LARGE_INTEGER tick;
LARGE_INTEGER timestamp;
QueryPerformanceFrequency(&tick);
QueryPerformanceCounter(×tamp);
us=(timestamp.QuadPart % tick.QuadPart)*1E6/tick.QuadPart;
return us;
}
#else
unsigned int getstimeval()
{
unsigned int us;
struct timeval tv;
gettimeofday(&tv, NULL);
us = (int)(tv.tv_usec);
return us;
}
#endif
string GF_GetGUID()
{
srand(getstimeval());
const char *c = "89ab";
char buf[37];
char *p = buf;
int n;
for( n = 0; n < 16; ++n )
{
int b = rand()%255;
switch( n )
{
case 6:
sprintf(p, "4%x", b%15 );
break;
case 8:
sprintf(p, "%c%x", c[rand()%strlen(c)], b%15 );
break;
default:
sprintf(p, "%02x", b);
break;
}
p += 2;
switch( n )
{
case 3:
case 5:
case 7:
case 9:
*p++ = '-';
break;
}
}
*p = 0;
return string(buf);
}