如何解决从Int到Float的转换Python至C ++
我有一个用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.
}
解决方法
所以我欠你们道歉。我很愚蠢,没有在这里发表之前做过足够的测试。我的C ++解决方案可以100%工作。我测试了纹理的不同颜色,结果是,我以错误的方式为纹理分配了值。我尝试将浮子推入纹理中,这是16位纹理。经过上述转换后,我需要将这些浮点数转换为半精度浮点数,然后才开始工作。名为PF_FloatRGBA的纹理标志使我相信,浮点数是在此处分配的正确对象,并且不是。
我仍然需要学习很多东西。感谢您的所有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。