我是.NET和C#的新手,我试图弄清楚这段代码的工作原理:
public static string CreateRandomPassword(int PasswordLength)
{
String _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ23456789";
Byte[] randomBytes = new Byte[PasswordLength];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;
for(int i = 0;i<PasswordLength;i++)
{
///
/// I don't understand how this line works:
///
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
}
return new string(chars);
}
我认为我在大多数情况下都能很好地处理。我无法理解以下内容:
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
我知道代码会生成随机二进制数,并在for循环中使用这些随机数从_allowedChars字符串中选择一个字符。我不明白的是为什么这段代码使用模运算符(%)来获取_allowedChars索引值。
谢谢你的帮助
最佳答案
randomBytes [i]的值可以是0到255之间的任何整数。_allowedChars数组的长度小于255。modules运算符返回将第一个参数((int)randomBytes [i])除以第二个参数的余数。参数(allowedCharCount)。这样可以确保我们使用_allowedChars数组索引的值(取模运算符的结果)始终小于允许的CharacterCount。