Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
翻译;常量浮点*;来自C++;到C# 如何将C++代码片段翻译成C?_C#_C++ - Fatal编程技术网

翻译;常量浮点*;来自C++;到C# 如何将C++代码片段翻译成C?

翻译;常量浮点*;来自C++;到C# 如何将C++代码片段翻译成C?,c#,c++,C#,C++,我已经尝试过使用a,但它似乎也无法翻译它 编辑: 以下是整个功能: 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]

我已经尝试过使用a,但它似乎也无法翻译它

编辑:
以下是整个功能:

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];
    }
}
void fm_getAABB(无符号整数vcount、常量浮点*点、无符号整数pstride、,
浮动*bmin,浮动*bmax)
{
常量无符号字符*源=(常量无符号字符*)点;
体重指数[0]=得分[0];
体重指数[1]=得分[1];
体重指数[2]=分[2];
bmax[0]=点[0];
bmax[1]=点[1];
bmax[2]=点[2];
for(无符号整数i=1;ibmax[0])bmax[0]=p[0];
如果(p[1]>bmax[1])bmax[1]=p[1];
如果(p[2]>bmax[2])bmax[2]=p[2];
}
}

如果不了解更多上下文,很难说。我希望您能够用一个浮点数组替换所有指针的使用


通常,C++指针用于单个项或一个项目数组,但我不能肯定地告诉您从示例代码中得到什么,但是使用复数“点”似乎表明它是一个数组。

很难说,如果不看更多上下文。我希望您能够用一个浮点数组替换所有指针的使用


通常,C++指针用于单个项或一个项目数组,但我不能肯定地告诉您从示例代码中得到什么,但是使用复数“点”似乎表明它是一个数组。

< P>一个选项是用C的不安全模式来翻译这个。C#完全能够运行此代码,只需稍加修改。例如,您需要删除常量修饰符


如果您设法生成一个仅受管理的版本,那当然更好。但这是否可能还不完全清楚:您的函数正在执行某些指针操作,这可能导致未对齐的访问。无法使用仅受管功能以未对齐的方式访问受管阵列。

一个选项是使用C#的不安全模式按原样进行转换。C#完全能够运行此代码,只需稍加修改。例如,您需要删除常量修饰符


如果您设法生成一个仅受管理的版本,那当然更好。但这是否可能还不完全清楚:您的函数正在执行某些指针操作,这可能导致未对齐的访问。托管数组不能使用托管的特征以未对齐的方式访问。

在C语言中没有使用指针的安全方法,C语言是比C++更安全的语言,但这也可以使它在这种情况下更具限制性。
C++将允许您做许多其他语言无法做的事情,因为它将安全留给程序员,但C#将安全放在首位,因此限制了此类事情的发生。

在C#中使用指针没有安全的方法,C语言是一种比C++更安全的语言,但这也可以使它在这种情况下更具限制性。
C++将允许您做许多其他语言无法做的事情,因为它将安全性留给程序员,但C#将安全性放在第一位,因此限制了此类事情的发生。

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

这就是C#对类型双关语的回答
const unsigned char*源=(const unsigned char*)点


但它需要深入理解这个函数的功能,并基本上以C#方式重新实现它

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

这就是C#对类型双关语的回答
const unsigned char*源=(const unsigned char*)点



但它需要深入理解这个函数的功能,并基本上以C#方式重新实现它

C#不使用指针。像往常一样,解决办法包括:理解两种语言;了解原始代码;使用这种理解来编写期望的代码。我有一些C++语言的基本知识,但是在这种特殊情况下,我完全迷失了。@ SLAKS:以一个明显的不真实来开始你的评论会减损其他好的建议。你想要传递什么样的数据结构?C不使用指针。像往常一样,解决办法包括:理解两种语言;了解原始代码;用这种理解来编写所需的代码。我有一些C++语言的基本知识,但在这种情况下,我完全不知所措。@SLaks:以一个明显的谎言开始你的评论会有损于其他好的建议。你真正想要传递什么样的数据结构?如果你是我,你是如何重写这个函数的?这取决于:如果你不需要安全的代码版本,我只保留指针。工作量越少,引入错误的可能性就越小。我正在尝试使用不安全的关键字转换它,并删除“未签名”关键字,可以吗?@EduardoBrites,您可以删除未签名的内容(在本例中)。如果您需要安全的代码版本,请尝试理解stride参数(语义)的含义。然后,尝试摆脱对char*的强制转换。由于我不明白函数的用途是什么,我无法更具体地评论。函数的用途是从顶点数组计算轴对齐的边界框。指针转换存在的唯一原因是
pstride
以字节表示,因此从一个顶点到下一个顶点需要将地址增加
pstride
字节。如果
pstride
为gua
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];
    }
}