- ベストアンサー
バイト配列からfloat型の数値を構築する方法
byte型配列 buf[] に先頭から 00 00 80 3F という4バイト分の16進数値が入っているとします。 これはfloat型の 1.0 なのですが、これをfloat型変数に入れたいのです。 float f = (bufdata[0] << 24) | (bufdata[1] << 16) | (bufdata[2] << 8) | bufdata[3]; とすればできると思ったのですが、結果は -32705.0 という値になってしまいます。 int型はこの方法でできたのですが・・・ どこが間違っているのでしょうか。 あるいはもっとスマートな手段があるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その右辺の式で 0.5 という値を求めることが可能かどうか, 冷静に考えてみてください. ということで, 適切に int に変換してから Float.intBitsToFloat を呼んでください.
その他の回答 (1)
- taka37777
- ベストアンサー率30% (166/544)
回答No.1
試していませんが、少なくともbyte型から先にint型などにキャストしてシフトする必要があると思います。 byte型は8ビットなので、24ビットシフトすると違う値になります。
お礼
回答ありがとうございます。 ちょうど間違いに気づいたところでした・・・ 仮に右辺が正しくとも、出てきた整数値がそのままfloatになって(後ろに .0 をつけて)代入されるだけですし、 そもそも並びが逆でしたね・・・ それでも代替手段が分からず困っていましたが、 > Float.intBitsToFloat とても助かりました、ありがとうございます。