簡體   English   中英

Int to Float 轉換 Python 到 C++

[英]Int to Float conversion Python to 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 的紋理標志讓我相信浮點數是在那里分配的正確事物,但它們不是。

我還需要學習很多東西。 感謝你的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM