アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

その右辺の式で 0.5 という値を求めることが可能かどうか, 冷静に考えてみてください.


ということで, 適切に int に変換してから Float.intBitsToFloat を呼んでください.
    • good
    • 1
この回答へのお礼

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

それでも代替手段が分からず困っていましたが、
> Float.intBitsToFloat
とても助かりました、ありがとうございます。

お礼日時:2010/01/12 01:27

試していませんが、少なくともbyte型から先にint型などにキャストしてシフトする必要があると思います。


byte型は8ビットなので、24ビットシフトすると違う値になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!