硬件RNG - 如何使用?

时间:2010-07-20 16:15:19

标签: c# random

好的,我刚拿起硬件RNG,它包含一些简单的功能,如下所示,

GetRandomBytes(UInt Length,out object Array)
GetRandomDoubles(UInt Length,out object Array)

这些函数似乎很好地解释了,如何有效地使用这些函数来生成一定范围之间的数字?

我们发现的一些文档的更多信息,

GetRandomByte
    Return a single byte containing 8 random bits.

   GetRandomWord
    Return an unsigned integer containing 32 random bits.

   GetRandomDouble
    Returns a double-precision floating point value uniformly
    distributed between 0 (inclusive) and 1 (exclusive).

   GetRandomBytes
   GetRandomWords
   GetRandomDoubles
        Fill in an array with random values.  These methods all take
    two arguments, an integer specifying the number of values
    to return (as an unsigned long integer), and the array to
    return the values in (as a COM Variant).

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

如果我没有任何其他帮助或指示,那么第一次尝试我会做的就是这个(只看一下签名):

uint length = 20;
object array;
GetRandomBytes(length, out array);

然后我将尝试调试它,并在调用函数后查看array的实际类型。看一下函数的名称,我假设byte[],所以我会抛出:

byte[] result = (byte[])array;

就范围而言,这些功能签名远非自我解释。也许是length参数?

另请注意,在C#中没有UInt这样的东西。 System.UInt32uint是一种捷径。

答案 2 :(得分:0)

注意:这使用包含范围。您可能需要独占最大值,这是典型的。显然,这应该根据您的需要进行修改。

假设你得到一个随机的双重

public int getIntInRangeFromDouble(int min, int max, double rand) {
    int range = max-min+1;
    int offset = (int)(range*rand);
    return min + offset - 1;
}

您可以通过随机双打并执行

来应用此功能
int[] getIntsFromRandomDoubles(int min, int max, double[] rands) {
    int[] result = new int[rands.length];
    for(int i = 0; i < rands.length; i++) result[i] = getIntInRangeFromDouble(min,max,rands[i]);
    return result;
}