【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; }