2009-06-17 34 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