2012-07-03 84 views
0

如何將此C++代碼片段轉換爲C#?將「const float *」從C++翻譯爲C#

void fm_getAABB(..., const float *points, ...) 
{  
    // ... 
    const unsigned char *source = (const unsigned char *) points; 
    //...  
    const float *p = (const float *) source; 
    //... 
} 

我已經試過使用C++ to C# converter,但它似乎無法翻譯它。

編輯:
這裏的整體功能:

void fm_getAABB(unsigned int vcount, const float *points, unsigned int pstride, 
    float *bmin, float *bmax) 
{ 
    const unsigned char *source = (const unsigned char *) points; 

    bmin[0] = points[0]; 
    bmin[1] = points[1]; 
    bmin[2] = points[2]; 

    bmax[0] = points[0]; 
    bmax[1] = points[1]; 
    bmax[2] = points[2]; 

    for (unsigned int i = 1; i < vcount; i++) 
    { 
     source+=pstride; 
     const float *p = (const float *) source; 

     if (p[0] < bmin[0]) bmin[0] = p[0]; 
     if (p[1] < bmin[1]) bmin[1] = p[1]; 
     if (p[2] < bmin[2]) bmin[2] = p[2]; 

     if (p[0] > bmax[0]) bmax[0] = p[0]; 
     if (p[1] > bmax[1]) bmax[1] = p[1]; 
     if (p[2] > bmax[2]) bmax[2] = p[2]; 
    } 
} 
+0

C#不使用指針。你應該重寫它。 – SLaks

+3

像往常一樣,解決方案包括:獲得對兩種語言的理解;獲得對原始代碼的理解;使用這種理解來編寫所需的代碼。 –

+0

我有一些C++語言的基本知識,但在這個特定的情況下,我完全失去了。 –

回答

3

一種選擇是通過使用C#的不安全模式按原樣進行翻譯。 C#完全可以通過很小的修改來運行此代碼。例如,您需要刪除const修飾符。

如果您設法生成一個當然更好的託管版本。但這並不完全清楚,甚至可能:你的函數正在執行某些可能導致未對齊訪問的指針操作。託管數組無法使用託管功能以未對齊的方式訪問。

+0

如果你是我,你是如何重寫這個函數的? –

+0

這取決於:如果你不需要一個安全代碼版本,我只是保持指針。減少工作量,減少引入錯誤的可能性。 – usr

+0

如果我需要安全代碼版本,該怎麼辦? :) –

0

很難說沒有看到更多的上下文。我希望你能夠用浮點數組替換所有指針的使用。

正常情況下,C++指針用於單個項目或項目數組,但我無法確定告訴您哪些示例代碼 - 但使用複數「點」似乎表明它是數組。

+1

我會編輯我的問題,然後顯示整個功能。 –

1

在C#中沒有安全的方式來使用指針,C#比C++更安全,但是這也會使它在這種情況下更具限制性。

C++將允許您執行其他語言無法做到的許多事情,因爲它將安全性留給程序員,但C#卻將安全放在第一位,從而限制了這種情況的發生。

0

要在字符數組(字節)和其他值之間進行轉換,請使用BitConverter類。

http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx

這是C#的答案輸入夯實 const unsigned char *source = (const unsigned char *) points;

但是,它需要深刻理解這一功能是什麼,基本上在C#的方式重新實現它。