将浮点转换Python转换为C++

2024-07-08 10:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python编写的函数,它可以完美地满足我的需要(它不是我自己编写的)。 我需要将它转换成C++,以便提供相同的结果。我知道它将浮点保存为16位纹理,所以我猜这是将32位int转换为16位浮点。我需要做的就是让它在C++中工作。下面是python函数:

def packTextureBits(index):
    index = int(index)
    index = index +1024
    sigh=index&0x8000
    sigh=sigh<<16
    exptest=index&0x7fff
    if exptest==0:
        exp=0
    else:
        exp=index>>10
        exp=exp&0x1f
        exp=exp-15
        exp=exp+127
        exp=exp<<23
    mant=index&0x3ff
    mant=mant<<13
    index=sigh|exp|mant
    
    cp = pointer(c_int(index))
    fp = cast(cp, POINTER(c_float))
    return fp.contents.value

这是我在C++中的方法,但它返回完全扭曲的值:

float PackIntToFloat(int value)
{
    value += 1024;
    int sign = (value & 0x8000) << 16;
    int exp = value & 0x7fff;
    if(exp != 0)
    {
        exp = value >> 10;
        exp = exp & 0x1f;
        exp = exp - 15 + 127;
        exp = exp << 23;
    }
    int mant = (value & 0x3fff) << 13;
    value = sign | exp | mant;

    int* cp = new int(value);
    float* fp = reinterpret_cast<float*>(cp);

    return *fp;
    // Also tried return (float)value; but returns other weird values.
}

Tags: 函数indexreturnifvaluefloatcpint
1条回答
网友
1楼 · 发布于 2024-07-08 10:24:08

所以我应该向你们道歉。我很愚蠢,在发布之前没有做足够的测试。我的C++解决方案是100%工作。我测试了纹理的不同颜色,结果是,我以错误的方式为纹理指定了值。我试着将浮动推入纹理,它是16位纹理。在上面的转换之后,我需要将这些浮点数转换为半精度浮点数,然后它开始工作。名为PF_FloatRGBA的纹理标志让我相信,在那里分配浮动是正确的,但事实并非如此

我还需要学很多东西。谢谢你的帮助

相关问题 更多 >

    热门问题