私は4バイトを取り込み、IEEE-754フロートに変換する必要のあるプログラムを持っています。バイトは順不同で転送されますが、順番に並べ替えることができます。私の問題は、それらをフロートにキャストしています。コードの関連部分:浮動小数点型バイト配列をキャスト
//Union to store bytes and float on top of each other
typedef union {
unsigned char b[4];
float f;
} bfloat;
//Create instance of the union
bfloat Temperature;
//Add float data using transmitted bytes
MMI.Temperature.b[2] = 0xD1;//MMIResponseMsg[7];
MMI.Temperature.b[3] = 0xE1;//MMIResponseMsg[8];
MMI.Temperature.b[0] = 0x41;//MMIResponseMsg[9];
MMI.Temperature.b[1] = 0xD7;//MMIResponseMsg[10];
//Attempting to read the float value
lWhole=(long) ((float)MMI.Temperature.f);
//DEBUGGING
stevenFloat = (float)MMI.Temperature.f;
lWhole
長さであり、stevenFloat
はフロートです。デバッグするとき、バイト配列に割り当てた値が正しく格納されていることがわかりますが、stevenFloat
とlWhole
の値は正しくありません。それらは0の近くで、または最大のfloat/long値の近くにホバーするようです。 longとfloatは両方とも私のコンパイラで32ビットです。
これはなぜ動作しないのですか?それは、私が作業するコードを受け取ったときに私には正しいと見えました。そして、それはオンラインの一般的な解決策であるようですが、私はちょうど困惑しています。
を、あなたは彼らが順不同で転送されていますか?私が '0x41d7d1e1'を16進数に入れてコンバータを浮動させると、〜27が得られました。これはいい数字のようです。 –
エンディアン問題ですか? –
'0xD1E141D7'から何を得ると思いますか? – triclosan