2009-06-17 94 views
0

我怎样才能让它成为一个随机数字序列来自MSVC++程序和C#.NET程序?MSVC++ rand()和C#System.Random之间的关系

可能吗? MSVC++ rand()System.Random之间是否有任何关系?

鉴于下面的例子,它们看起来完全不同。

#include <iostream> 
using namespace std; 

int main() 
{ 
    srand(1) ; 

    cout << rand() << endl << 
    rand() << endl << 
    rand() << endl ; 
} 
using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
    Random random = new Random(1); 

    Console.WriteLine(random.Next()); 
    Console.WriteLine(random.Next()); 
    Console.WriteLine(random.Next()); 
    } 
} 

回答

2

在unmanaged C++中使用.NET mangaged库是可能的(不是很容易)。您可能想看看MSDN文档。

5

这样做将是使非托管引用包含与参数作为种子的随机数生成一个C++ DLL最简单的方法。然后你可以确定他们是一样的。

+2

这是正确的方式,而不是接受的答案。引入CLR只是为了随机功能将是疯狂的。 – Qix 2016-03-05 22:17:22

3

是的,他们是非常不同的功能。偶尔你会发现BCL类只是使用PInvoke来执行它们的原生对象周围的非常薄的包装。 System.Random不是这种情况。它是一个100%管理的实现,与srand版本完全分开。

你能否帮助我们解释一下为什么你想拥有相同的一组数字?是为了测试吗?

如果你真的想拥有相同的一组随机数,一个选择是创建一个包装srand的简单COM对象。 COM对象可用于托管代码和本地代码,因此可以在两个地方提供相同的算法。

+0

我将自己的项目之一从C++移植到C#。 它是一种类型的模拟,我想通过使用相同的随机数序列来快速检查是否错过了任何东西,所以我可以在两个窗口中看到相同的sim! – bobobobo 2009-06-17 03:40:18