pras007
pras007

Reputation: 115

How to generate non-negative random numbers(integer) using RNGCryptoServiceProvider C#

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

Answers (2)

cmbarbu
cmbarbu

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

rossum
rossum

Reputation: 15693

Pseudocode:

repeat
  temp <- RNG.nextInteger();
until temp >= 0;
return temp;

Upvotes: 0

Related Questions