我正在将 Visual Fox Pro 代码迁移到 C#。网
Visual Fox Pro 的特点是什么:
基于文本字符串(在文本框中捕获)生成一个 5 位数字的字符串(“48963”),如果您始终输入相同的文本字符串,则该字符串将始终为 5 位数字(无反向),我的 C# 代码。 NET 应该生成相同的字符串。
有一些代码我无法在 dot.net Rand (int) 中播放
在 Visual FoxPro 中:
rand(intValue)
在C#中。网:
Random r = new Random ();
return r.Next(intValue);
在 C# 中,我无法基于相同的 intValue 生成单个值,我知道它们是非常不同的库(VFP 和 C#),但如果有任何方法可以匹配 Visual Fox Pro 和 C# 的方法,则不会。网
我想迁移以下代码(Visual Fox Pro 6 到 C#)
gnLower = 1000
gnUpper = 100000
vcad = 1
For y=gnLower to gnUpper step 52
genClave = **Rand(vcad)** * y
vRound = allt(str(int(genclave)))
IF Len(vRound) = 3
vDec = Right(allt(str(genClave,10,2)), 2)
finClave = vRound+vDec
Thisform.txtPass.value = Rand(971);
Exit
Endif
Next y
outputs:
vcad = 1 return: 99905 vcad = 2 return: 10077 vcad = thanks return: 17200
.NET 中的 Rand 不保证主要修订号之间相同,因此Rand()
有一颗种子1234
2.0 中的可能与Rand()
在 4.0 中具有完全相同的种子。
如果您必须匹配旧的含义,您将需要了解 Visual Fox Pro 如何执行其 Rand 函数。但是,如果您想要相同的行为,但不想要相同的数字,您可以对字符串进行哈希处理,然后将其输出。
Random r = new Random (myTextBox.Text.GetHashCode());
return r.Next();
现在这不是加密安全的,并且不能保证在不同的计算机上生成相同的数字(它返回 32 和 64 位之间的不同数字,以及基于 .Net 运行时的不同版本(这实际上适用于两者)GetHashCode
and Random
本身!)),所以不要将其存储在数据库中!
如果您每次都需要从同一个字符串中输出相同的数字,无论它在哪台计算机上,只需使用RNG加密服务提供商 http://msdn.microsoft.com/en-us/library/5f45t420 in the System.Security.Cryptography
命名空间。
//Returns the same number between 0 and 255 every time.
using(var myRng = new RNGCryptoServiceProvider(myTextBox.Text))
{
var ret = new byte[1];
myRng.GetBytes(ret);
return ret[0];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)