私はC++でプログラミングしています。24ビットの符号付き整数(3バイト配列に格納されている)をfloat([-1.0,1.0]に正規化)に変換する必要があります。
プラットフォームはx86上のMSVC++です(つまり、入力はリトルエンディアンです)。
私はこれを試しました:
float convert(const unsigned char* src)
{
int i = src[2];
i = (i << 8) | src[1];
i = (i << 8) | src[0];
const float Q = 2.0 / ((1 << 24) - 1.0);
return (i + 0.5) * Q;
}
完全にはわかりませんが、このコードから得られる結果は正しくないようです。それで、私のコードは間違っていますか?もしそうなら、なぜですか?