Reputation: 115
I need to generate non-negative random integers in my code. The example below generates integers;
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);
}
}
Ref: http://www.dotnetperls.com/rngcryptoserviceprovider But it gives both positive and negative values. How do I generate only non-negative random integers? I was earlier using Random.Next() which was giving me positive integers.
Upvotes: 1
Views: 2040
Reputation: 4534
In your specific case, just use ToUInt32
in place of 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);
}
}
Upvotes: 3
Reputation: 15693
Pseudocode:
repeat
temp <- RNG.nextInteger();
until temp >= 0;
return temp;
Upvotes: 0