我一直在尝试模拟在C#中滚动一个6面骰子。我认为使用RNGCSP比使用Random更好,因为它更安全。
我试着使用MSDN示例代码来实现这一点,但是有一些事情我没有从代码中理解:
发布于 2015-08-09 23:00:35
1.如何使用RNGCSP?生成5位长数字
对于数字,您可以使用一个范围。不过,你得考虑下界。数字的范围在RNGCryptoServiceProvider中处理。
因此,对于一个5位数的数字,min将是0或10000,而max将是100000,因为max是唯一的。
2.如何生成从1到6的数字(不包括零)?
基本上相同的方式是,生成一个范围[1,7],其中7- max值--是排他性的。
如果您只想得到一个骰子结果,您可以这样做(未经测试!):
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] singleByteBuf = new byte[1];
int max = Byte.MaxValue - Byte.MaxValue % 6;
while (true) {
rng.GetBytes(singleByteBuf);
int b = singleByteBuf[0];
if (b < max) {
return b % 6 + 1;
}
}基本上相同,但每次只从RNGCryptoServiceProvider请求一个字节,这样就不会浪费3个额外的字节。
https://stackoverflow.com/questions/31906015
复制相似问题