2017-09-12 35 views
-4

16ビット整数を浮動小数点数に変換するにはどうすればよいですか?int16をC言語で浮動小数点に変換する

私は小数点以下3桁の精度で表示する必要があると言われている符号付き16ビット変数を持っています。したがって、これは浮動小数点への変換を伴うでしょうか?

私はフロートに自分の16ビットをコピーするだけでこれを試しましたが、これは正しくないようです。

float myFloat = 0; 
int16_t myInt = 0x3e00; 
memcpy(&myFloat, &myInt, sizeof(int)); 

私はまた、半精度浮動小数点数について読むが、これを処理する方法がわからないよ...私がする必要がある場合ました。

私はGCCを使用しています。

更新: データソースは、i2cインターフェイスから取得するchar配列[2]です。私はこれを一緒にステッチして署名付きのintにします。

誰でも手助けできますか?

+0

フムを浮上さconveringせずにこのスケーリングされた整数を印刷することができます。なぜ最初はint16なのですか?それは何を表していますか? –

+5

あなたの質問は意味をなさない。 16ビット整数は整数です。小数点以下の桁はありません。 –

+3

私はあなたの要求が(ナンセンスを求めていない限り)もう少し明確になっていると思います。たぶん、ADCからの16ビットの符号付きの値があります。これは3桁の精度(またはそのようなもの)で入力物理的な範囲(私たちを表示しません)に従って 'float'に変換する必要があります。あなたが 'int16_t'の範囲と入力値の範囲を持っていれば、それはただの割合です。 –

答えて

1

私はinteger値がこのように表示することができ、私は で小数点第3位

誰かがあなたに言った場合の精度を表示する必要があると聞いてい符号付き16ビットの変数を持っている彼/彼女はC Begginersコースから始めるべきです。

唯一の可能性は、整数値がスケーリング(乗算)されていることです。 1000を乗じた場合には、このような場合、例えば12.456の値は整数に格納することができる。

float flv; 
int intv = 12456; 

flv = (float)intv/1000.0f; 

あなたはまた

printf("%s%d.%03d\n", intv < 0 ? "-": "", abs(intv/1000), abs(intv % 1000)); 
+0

@chux良い点 –

+0

さらに良いですが、 'intv = -1'を考慮してください。 printf( "%s%d。%03d"、 " - " [intv> = 0]、abs(intv/1000)、abs(intv%1000))のようなものが必要かもしれません。 – chux

関連する問題