2012-07-03 45 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#的方式重新实现它。