0

私は C を初めて使用し、C を使用した組み込み処理の世界に夢中になりました。char*整数と浮動小数点数 (解像度は 0.01 のみ) を 8 ビット インターフェイスの LCD 画面に変換して出力する必要があります。私はいくつかの投稿を読んでいて、これらすべての変換に関する素晴らしいアイデアを見てきましたがintfloatそれらchar*で何が起こっているのか正確にはわかりません.

誰かが私の2つのクエリと少しの説明の方法を提供できますか?

4

2 に答える 2

4

実際には標準ライブラリに依存しており、一部の組み込みシステムでは、そのライブラリが部分的に実装されているか、存在しない場合さえあります。完全に標準的な C99実装では、次のようなことができます

char buf[40];
int i;
double x;
// compute i & x, then make a string from them with::
snprintf(buf, sizeof(buf), "i=%2d x=%.2f", i, x);

次に、それbufを LCD ポートに送信するかstrdup、後で使用するために送信します。(使用するstrdup場合は、結果が必要になりますfree)。

詳細については、 snprintfのドキュメントを参照してください。おそらく、 の戻りint値をテストする必要がありsnprintfます。

于 2012-10-26T16:37:46.653 に答える
3

組み込みプログラミングに取り組んでいるので、標準の変換では多くの場合、プロセッサに非常に負担のかかる除算が使用されるという事実に注意する必要があります。

整数は 10 除算を使用して変換されるため、代わりに、不変整数による乗算を使用して除算を実装できます。この方法では、除算を使用して値の 1 桁を変換するのにかかる時間で、ほとんどの値を変換できるはずです。

浮動小数点の場合、次の手順を使用します。

  1. 符号を保存し、符号が負の場合は絶対値を取る
  2. 必要な小数点以下の桁数に 10.0 を掛けます
  3. 0.5を足して整数に変換
  4. 以前に提案された除算方法を使用して整数を文字列に変換します
  5. 文字列が少なくとも小数点以下の桁数 + 1 であることを確認し、必要に応じて先頭に ascii 0 を挿入します
  6. 必要に応じて先頭にマイナス記号を挿入します
  7. 適切な位置に小数点を挿入する

小数点以下 2 桁が必要な例を次に示します。

3758.3125
375831.25    (multiply by 10^2)
375831.75    (add 0.5)
375831       (convert to integer)
"375831"     (convert to string)
"3758.31"    (insert decimal point => final result)

もう少し難しいケース

-0.0625
0.0625       (keep sign)
6.25         (multiply by 10^2)
6.75         (add 0.5)
6            (convert to integer)
"6"          (convert to string)
"006         (insert ascii 0 as required)
"-006"       (insert minus sign)
"-0.06"      (insert decimal point => final result)
于 2012-10-26T18:06:25.487 に答える