我正在尝试编写一个函数,该函数使用默认的 RandomNumberGenerator 实现来生成指定范围内的 Int32 值。
void GenerateRandom (int [] data, int minInclusive, int maxExclusive)
{
int size = 0;
int length = 0;
byte [] bytes = null;
size = (int) Math.Ceiling(Math.Log(Math.Abs(maxExclusive - minInclusive), 2));
length = data.Length * size;
var bytes = new byte [length];
using (RandomNumberGenerator generator = RandomNumberGenerator.Create())
{
generator.GetBytes(bytes);
}
// How to effectively convert this `byte []` to an `int []` within the specified range?
}
一种尝试是生成一个随机长度的字节数组,(data.Length * ((int) Math.Ceiling(Math.Log(Math.Abs(maxExclusive - minInclusive), 2))))
并将每个 x 个字节组合成一个 int。无论指定范围如何,这种方法当然具有对较大值的巨大偏差的缺点,因为多个最高有效字节为零的可能性很小。
任何输入将不胜感激。虽然我在这里使用.NET,但平台/语言并不重要。寻找概念提示。
请注意,我已经熟悉 .NET 中的 Random 类,但我只想弄清楚如何在能够使用 RandomNumberGenerator 的同时手动执行此操作。