カンテラの光の下で

dNaga392's memorandom

【C++】Java の intBitsToFloat を実装する

Java の Float には intBitsToFloat というstatic関数が存在します。 これはint型のビット列をfloat型のビット列とみなして変換するものです。

int型とfloat型は、一般にデータサイズが同じ32bitです。 そのため、バイナリデータを扱うなど、ビット列を操作する場合に変換処理を使用します。

もっとも簡単なC++での実装は、次のような実装でしょう。

float intBitsToFloat(int bits)
{
    return (*(float *)(&bits));
}

しかし、これは妥当な実装ではありません。 strict aliasing rules に違反しており、コンパイラによっては警告を表示します。

適切な実装は memcpy を利用する実装です。 具体的には次の実装になります。

float intBitsToFloat(int bits)
{
    float f;
    memcpy(&f, &bits, sizeof(float));
    return f;
}