• ベストアンサー

バイト配列から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型はこの方法でできたのですが・・・ どこが間違っているのでしょうか。 あるいはもっとスマートな手段があるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

その右辺の式で 0.5 という値を求めることが可能かどうか, 冷静に考えてみてください. ということで, 適切に int に変換してから Float.intBitsToFloat を呼んでください.

mokpok
質問者

お礼

回答ありがとうございます。 ちょうど間違いに気づいたところでした・・・ 仮に右辺が正しくとも、出てきた整数値がそのままfloatになって(後ろに .0 をつけて)代入されるだけですし、 そもそも並びが逆でしたね・・・ それでも代替手段が分からず困っていましたが、 > Float.intBitsToFloat とても助かりました、ありがとうございます。

その他の回答 (1)

  • taka37777
  • ベストアンサー率30% (166/544)
回答No.1

試していませんが、少なくともbyte型から先にint型などにキャストしてシフトする必要があると思います。 byte型は8ビットなので、24ビットシフトすると違う値になります。

関連するQ&A