我需要在代码中生成非负随机整数。以下示例生成整数;
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
// Buffer storage.
byte[] data = new byte[4];
// Ten iterations.
for (int i = 0; i < 10; i++)
{
// Fill buffer.
rng.GetBytes(data);
// Convert to int 32.
int value = BitConverter.ToInt32(data, 0);
Console.WriteLine(value);
}
}
参考:http://www.dotnetperls.com/rngcryptoserviceprovider 但它给出了积极和消极的价值观。如何仅生成非负随机整数? 我之前使用的是Random.Next(),它给了我正整数。
答案 0 :(得分:1)
在您的具体情况下,只需使用ToUInt32
代替ToInt32
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
// Buffer storage.
byte[] data = new byte[4];
// Ten iterations.
for (int i = 0; i < 10; i++)
{
// Fill buffer.
rng.GetBytes(data);
// Convert to int 32.
int value = BitConverter.ToUInt32(data, 0);
Console.WriteLine(value);
}
}
答案 1 :(得分:0)
伪代码:
repeat
temp <- RNG.nextInteger();
until temp >= 0;
return temp;