0

如何将此 C++ 代码片段翻译成 C#?

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

我已经尝试使用C++ 到 C# 转换器,但它似乎也无法翻译它。

编辑:
这是整个功能:

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];
    }
}
4

4 回答 4

3

一种选择是使用 C# 的不安全模式按原样进行翻译。C# 完全能够通过少量修改运行此代码。例如,您需要删除 const 修饰符。

如果您设法制作一个仅限托管的版本,那当然会更好。但是,这甚至是可能的并不完全清楚:您的函数正在执行某些指针操作,这可能会导致未对齐的访问。托管阵列不能使用仅托管功能以非对齐方式访问。

于 2012-07-03T15:21:43.323 回答
1

在 C# 中使用指针没有一种安全的方法,C# 是一种比 C++ 更安全的语言,但这也可能使其在这种情况下更具限制性。

C++ 将允许您做许多其他语言不能做的事情,因为它将安全性留给了程序员,但是 C# 将安全性放在首位,因此限制了此类事情的发生。

于 2012-07-03T15:22:02.823 回答
0

很难说没有看到更多的上下文。我希望您能够用浮点数组替换所有指针的使用。

通常,C++ 指针用于单个项目或项目数组,但我不能确定从您的示例代码中分辨出哪个 - 但复数“点”的使用似乎表明它是一个数组。

于 2012-07-03T15:14:30.767 回答
0

要在字符(字节)数组和其他值之间进行转换,请使用 BitConverter 类。

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

这是类型双关语的 C# 答案 const unsigned char *source = (const unsigned char *) points;

但它需要深入了解这个函数的作用,并基本上以 C# 的方式重新实现它。

于 2012-07-03T15:25:51.587 回答