Kai*_*aan 1 c++ random winapi visual-studio
你好,
简单的问题; 我正在寻找一种方法来获得比rand()给我更高的随机值.rand()给出最大32767.(http://msdn.microsoft.com/en-us/library/398ax69y%28v=vs.80%29.aspx)我尝试重新定义RAND_MAX,但我想编译器不接受重新定义,因为它在与默认值相同的边界.
我基本上想要一个适合无符号整数的随机值(在RTP数据包中生成一个SSRC号).我真的不想碰撞!有没有比rand()更好的win32功能?
提前致谢
是的 - RAND_MAX只是告诉你设计到发电机的最大值.更改它不会影响发电机的工作方式.
从中获取32位值的最简单方法可能rand()是连续调用两次,并将两个值放在一起:
unsigned SSRC = rand()| 兰德<< 16;
一种典型的播种方式rand()是time:
srand((unsigned)time(NULL));
Run Code Online (Sandbox Code Playgroud)
对于SSRC,您不希望这样做 - time通常只有一秒钟的粒度,因此这(几乎)保证任何两个进程在接近同一时间启动都会导致冲突.
实际上,随机性几乎与唯一性无关.另一种可能性是(例如)将机器的IP地址,进程ID,时间和XOR三者结合在一起.结果根本不是特别随机的,但对于这种任务来说是足够独特的.