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

1つのオプションは、C#の安全でないモードを使用して、これをそのまま変換することです。C#は、わずかな変更を加えてこのコードを完全に実行できます。たとえば、const修飾子を削除する必要があります。

もちろん、管理対象のみのバージョンを作成する場合は、それが望ましいでしょう。しかし、それが可能であるかどうかは完全には明らかではありません。関数が特定のポインター操作を実行しているため、アクセスが整列されない可能性があります。管理対象アレイは、管理対象専用機能を使用して、調整されていない方法でアクセスすることはできません。

于 2012-07-03T15:21:43.323 に答える
1

C#でポインターを使用する安全な方法はありません。C#はC ++よりもはるかに安全な言語ですが、このような場合はさらに制限が厳しくなります。

C ++を使用すると、安全性をプログラマーに任せるため、他の言語ではできない多くのことが可能になりますが、C#は安全性を最優先するため、このようなことが起こらないように制限します。

于 2012-07-03T15:22:02.823 に答える
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 に答える
0

文脈を見ずに言うのは難しい。ポインタのすべての使用をfloatの配列に置き換えることができると思います。

通常、C ++ポインターは単一のアイテムまたはアイテムの配列に使用されますが、サンプルコードからどちらかはわかりませんが、複数の「ポイント」を使用すると、それが配列であることを示しているようです。

于 2012-07-03T15:14:30.767 に答える