標準のCコンパイラをベースにしたMicrochipのXC32コンパイラを使用しています。C言語で単精度IEEE-754フロートとして32ビット符号なしlongを解釈する
私はRS485ネットワーク上のデバイスから32ビットの値を読み取り、これをDWORDとしてtypedefされた符号なしlongに格納しています。
すなわち
typedef DWORD unsigned long;
現状では、私はfloatにこの値を型キャストするとき、私が取得値は、基本的にはそれの浮動小数点バージョンの整数表現はなく、適切なIEEE-754解釈フロートです。
すなわち
ここDWORD dword_value = readValueOnRS485();
float temp = (float)dword_value;
は、小数点以下が1130807492として表現されるよう0x4366C0C4としてHEX形式で通ってくるでしょうdword_valueはそうフロートに、このの型キャストは、単に私を与え1.130807492 * 10^9または1130807492.0それは私が望むものではありません。
私はそうはっきりとfloatに型キャストすることは私のために動作しません私に230.75299072265625
のfloat値を与えるだろう単精度IEEE-754の表現をしたいです。私はこのフォームを私に変換する方法が必要です。私はXC32ライブラリの中を見渡しましたが、何も見つかりませんでした。
私にこの解釈を適切に行う定義済みの方法を知っている人はいますか?または、私が書くことができるいくつかの提案された方法がありますか?私はこの特定のタスクのために私自身のコードを書くのを避けようとしています.Cが既にこのための関数を持っていれば効率的な解決策が見つからないと心配しています。
興味深いのは正しく230.75として* Iがchar *にこれを行う場合、値はその文字で表現され、次のとおりです。画面に
sprintf(random_char_pointer, "%.2f, dword_value);
ここで印刷random_char_pointerは私に230.75を与えるので、sprintfのでなければなりません私のための解釈を正しく処理する。したがって私は既にCの中に何かがあると仮定しています。誰も助けることができますか?
'f = *(float *)&uvalue;'(プラス/マイナスアラインメントの考慮) – joop
@joopこれは 'float'へのキャストと同じではありませんか? – Downvoter
いいえ、私はunsigned int *ポインタ*をfloat *ポインタ*にキャストし、逆参照します。 – joop