floatをchar *に変換するにはどうすればよいですか?


11

電気工学スタック交換でこの質問をし、ここに向けられました:

かなり自明です。floatをchar *に変換するにはどうすればよいですか?フロートの「抵抗」が常に更新されているコードがあります。変数「result」を更新して、「resistance」の値を取得できるようにしたいと思います。役立つ場合に備えて、以下にコードの一部を示します。

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

ご協力いただきありがとうございます!

回答:


15

と呼ばれる標準のArduinoライブラリに関数がありdtostrf()ます。私はそれを「10進から文字列フロート」と考えています。フロート、整数の幅(フィットする場合)、小数点以下の桁数、および埋めるバッファを渡します。

ご了承ください!バッファを提供する必要があり、十分以上のものを提供するように注意する必要があります!1を追加することも忘れないでください(最後にNUL文字を格納するため):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

これにより、and や(引用符なし)などのresult値が得られます。最後の例に注意してください。数値が大きすぎても切り捨てられず、10文字(最後の文字を忘れないでください)がバッファをオーバーフローしただけです..." 1.23"" -1.23""123456789"resultNUL

ちなみに、負の幅を指定すると、答えは右揃えにならず、左揃えになります(先頭ではなく末尾にスペースを入れます)。


トリックはうまくいきました!どうもありがとうございました:)
higgsboson

-2

基本的に、4バイトの変数(float)を4バイトの文字列に変換しようとしています(char変数は1バイトのサイズです)。Arduinoデータタイプの詳細については、こちらをご覧くださいhttp://playground.arduino.cc/Code/DatatypePractices

あなたはこれらの質問への答えを試すことができ ます/programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

/programming/24420246/c-function-to-convert-float-to-byte-array

const char * result = "";はあなたの例での使用に混乱していることを認めます。

「const」キーワードは、変数を「読み取り専用」にするため、変更することはできません。 https://www.arduino.cc/en/Reference/Const

編集:残念ながら、上記の解決策を自分でテストするためのArduinoデバイスは現在ありません


1
constキーワードがないではない変数は読み取り専用になります。ここでの変数はポインターであり、定数である必要はありません。constキーワードは、資格データが指されているポインタそのものではありません、。つまり、そのポインタを介して文字列を変更することはできません。定数ポインターが必要な場合は、次のように宣言しますchar * const result(またはデータへconst char * const resultconstポインターがconst必要な場合)。
Edgar Bonet、2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.