c++ - win32 - 更高的随机最大值?

标签 c++ visual-studio winapi random

<分区>

Possible Duplicate:
Filling an array with random numbers from 1 to 10^10 in C or C++

你好,

简单的问题;我正在寻找一种方法来获得比 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() 两次,然后将两个值放在一起:

未签名的 SSRC = rand() |兰德 << 16;

rand() 的一种典型播种方式是使用 time:

srand((unsigned)time(NULL));

对于 SSRC,您想要这样做——time 通常只有一秒的粒度,因此这将(几乎)保证任何两个进程几乎同时启动会导致冲突。

实际上,随机性远不如唯一性重要。另一种可能性是(例如)获取您机器的 IP 地址、进程 ID 和时间,并将这三者放在一起。结果根本不是特别随机,但对于此类任务来说足够独特。

关于c++ - win32 - 更高的随机最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832975/

相关文章:

c++ - 为什么没有找到 operator<< 重载?

c++ - 是否有 std::sum 更新的实现

visual-studio - Visual Studio 2010 中的多行观察窗口?

c++ - 如何在没有 list 的情况下启用视觉样式

win32 COORD 结构的编译器错误?

c++ - 枚举机器上的所有 IDispatch 实现对象

c++ - 如何测试行情数据解析程序

c++ - Qt 创建者:c++:未定义对 Class::Function 的引用

visual-studio - 如何使 ClickOnce Publish 版本与 AssemblyInfo.cs 文件版本相匹配?

visual-studio - 部署到 HoloLens 时在 VS17 中找不到 SDK "WindowsMobile, Version=10.0.18362.0"错误