unsigned long を Float 単精度に変換する際に問題があります これが私の問題です
プログラムで浮動小数点で通信する必要がありますが、内部変数はすべて unsigned long です。そのため、すべてが同じ (unsigned long) のままになるように設計し、float をアプリケーションに渡す必要があると決めました。 float に変換して渡します。
したがって、すべての変数は、次のように IEEE 754 ビット ストリームを持ちます。
私が従う手順:
- char配列で値を取得します
- ビットを取得して unsigned long にコピーします
- 関数呼び出しでデータを渡しながら、単精度浮動小数点型に型キャストします。
デバッガーでは、ステップ 1 と 2 で同じビット パターン (バッファー内) が表示されます。
ステップ 3 でも同じバイナリ パターンが表示されますが、値が float として解釈されません。
入力: 21.125
- バイナリ: 01000001101010010000000000000000
- 16 進数: 0x41a90000
10 進数: 1101594624
Code: void ApplicationApi(void * DataPtr) { (*(float32*)((void*)DataPtr))= unsignedLong_val; }
アプリケーションの結果 DataPtr * DataPtr = 1.101594624 * e9
ここに何かが欠けていますか、それともタイプケースが機能しましたか?